From a94812d5623adc49d5d83a4dca5d7cdfc1996f2a Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 22 Aug 2021 15:45:54 +0200 Subject: [PATCH 01/68] Update upgrade --- scripts/upgrade | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/scripts/upgrade b/scripts/upgrade index af6a90b..3e414b7 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -118,6 +118,16 @@ ynh_script_progression --message="Modifying a config file..." --weight=1 ynh_add_config --template="../conf/config.default.yml" --destination="$final_path/config.yml" +#================================================= +# CREATE DIRECTORIES +#================================================= + +mkdir -p /home/yunohost.app/$app/{torrents,downloads} + +chown -R $app:www-data /home/yunohost.app/$app +chmod 755 /home/yunohost.app/$app/{torrents,downloads} + +#================================================= #================================================= # SETUP SYSTEMD #================================================= From e5ccf5fea6a3cc2bff3070dce5e997445d9a840b Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 22 Aug 2021 15:46:08 +0200 Subject: [PATCH 02/68] Update manifest.json --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 785b3a4..f5d60a6 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "Self-hosted remote torrent client", "fr": "Client torrent distant auto-hébergé" }, - "version": "1.3.6~ynh2", + "version": "1.3.6~ynh3", "url": "https://github.com/boypt/simple-torrent", "upstream": { "license": "AGPL-3.0-only", From 59f37f6265ece4a605d3b4d5e753f82a5e3e663c Mon Sep 17 00:00:00 2001 From: Yunohost-Bot <> Date: Sun, 22 Aug 2021 13:46:11 +0000 Subject: [PATCH 03/68] Auto-update README --- README.md | 2 +- README_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e825628..abafb27 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in Self-hosted remote torrent client -**Shipped version:** 1.3.6~ynh2 +**Shipped version:** 1.3.6~ynh3 diff --git a/README_fr.md b/README_fr.md index 3ce1b17..daf14c9 100644 --- a/README_fr.md +++ b/README_fr.md @@ -13,7 +13,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour Client torrent distant auto-hébergé -**Version incluse :** 1.3.6~ynh2 +**Version incluse :** 1.3.6~ynh3 From 80eec34965f54f06bc7fb854912443924eb9f7e1 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 29 Aug 2021 10:45:18 +0200 Subject: [PATCH 04/68] Update restore --- scripts/restore | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/restore b/scripts/restore index 18fbbdd..9e0b1c3 100644 --- a/scripts/restore +++ b/scripts/restore @@ -34,8 +34,6 @@ datadir=$(ynh_app_setting_get --app=$app --key=datadir) #================================================= ynh_script_progression --message="Validating restoration parameters..." --weight=2 -ynh_webpath_available --domain=$domain --path_url=$path_url \ - || ynh_die --message="Path not available: ${domain}${path_url}" test ! -d $final_path \ || ynh_die --message="There is already a directory: $final_path " From 9edc802bb9c169103708a9af0880ff80bd528a15 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 29 Aug 2021 10:46:43 +0200 Subject: [PATCH 05/68] Update remove --- scripts/remove | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/remove b/scripts/remove index c154d2d..8fef2b5 100644 --- a/scripts/remove +++ b/scripts/remove @@ -56,7 +56,7 @@ ynh_secure_remove --file="$final_path" #================================================= # # Remove the app data directory with the command `yunohost app remove --purge` -# if [ "$YNH_APP_PURGE" == true ] +# if [ "${YNH_APP_PURGE:-0}" -eq 1 ] # then # ynh_script_progression --message="Removing $app data directory..." --weight=2 # ynh_secure_remove --file="$datadir" From c4f49de45ca7b67142e8adb55305d21041eeec11 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 29 Aug 2021 10:47:36 +0200 Subject: [PATCH 06/68] Create DESCRIPTION.md --- doc/DESCRIPTION.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 doc/DESCRIPTION.md diff --git a/doc/DESCRIPTION.md b/doc/DESCRIPTION.md new file mode 100644 index 0000000..a18f9ef --- /dev/null +++ b/doc/DESCRIPTION.md @@ -0,0 +1 @@ +SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. \ No newline at end of file From 6825a9fbcdce0f54beeeacf85d6d5d9794d014f0 Mon Sep 17 00:00:00 2001 From: Yunohost-Bot <> Date: Sun, 29 Aug 2021 08:47:42 +0000 Subject: [PATCH 07/68] Auto-update README --- README.md | 2 +- README_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index abafb27..931f9a6 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in ## Overview -Self-hosted remote torrent client +SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. **Shipped version:** 1.3.6~ynh3 diff --git a/README_fr.md b/README_fr.md index daf14c9..0fc1a30 100644 --- a/README_fr.md +++ b/README_fr.md @@ -11,7 +11,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour ## Vue d'ensemble -Client torrent distant auto-hébergé +SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. **Version incluse :** 1.3.6~ynh3 From 1c9982f42cd8ae119e563f5f15d060c41e8c57bb Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 29 Aug 2021 10:49:20 +0200 Subject: [PATCH 08/68] Update DESCRIPTION.md --- doc/DESCRIPTION.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/doc/DESCRIPTION.md b/doc/DESCRIPTION.md index a18f9ef..399d154 100644 --- a/doc/DESCRIPTION.md +++ b/doc/DESCRIPTION.md @@ -1 +1,13 @@ -SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. \ No newline at end of file +SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. + +### Features + +- Individual file download control (1.1.3+) +- Run external program on tasks completion +- Stops task when seeding ratio reached +- Download/Upload speed limiter +- Detailed transfer stats in web UI. +- Torrent Watcher +- Extra trackers from external source +- Protocol Handler to magnet +- Magnet RSS subscribing supported From 369e5b42c8c68825fb7aebf96cdd3479c300a432 Mon Sep 17 00:00:00 2001 From: Yunohost-Bot <> Date: Sun, 29 Aug 2021 08:49:36 +0000 Subject: [PATCH 09/68] Auto-update README --- README.md | 13 +++++++++++++ README_fr.md | 13 +++++++++++++ 2 files changed, 26 insertions(+) diff --git a/README.md b/README.md index 931f9a6..10293f0 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,19 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. +### Features + +- Individual file download control (1.1.3+) +- Run external program on tasks completion +- Stops task when seeding ratio reached +- Download/Upload speed limiter +- Detailed transfer stats in web UI. +- Torrent Watcher +- Extra trackers from external source +- Protocol Handler to magnet +- Magnet RSS subscribing supported + + **Shipped version:** 1.3.6~ynh3 diff --git a/README_fr.md b/README_fr.md index 0fc1a30..f1e62e9 100644 --- a/README_fr.md +++ b/README_fr.md @@ -13,6 +13,19 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. +### Features + +- Individual file download control (1.1.3+) +- Run external program on tasks completion +- Stops task when seeding ratio reached +- Download/Upload speed limiter +- Detailed transfer stats in web UI. +- Torrent Watcher +- Extra trackers from external source +- Protocol Handler to magnet +- Magnet RSS subscribing supported + + **Version incluse :** 1.3.6~ynh3 From e72e2fc6f7b4e33c231b81cecc0c949ec4021394 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Thu, 16 Sep 2021 10:38:47 +0200 Subject: [PATCH 10/68] Create updater.sh --- .github/workflows/updater.sh | 136 +++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 .github/workflows/updater.sh diff --git a/.github/workflows/updater.sh b/.github/workflows/updater.sh new file mode 100644 index 0000000..7344e2b --- /dev/null +++ b/.github/workflows/updater.sh @@ -0,0 +1,136 @@ +#!/bin/bash + +#================================================= +# PACKAGE UPDATING HELPER +#================================================= + +# This script is meant to be run by GitHub Actions +# The YunoHost-Apps organisation offers a template Action to run this script periodically +# Since each app is different, maintainers can adapt its contents so as to perform +# automatic actions when a new upstream release is detected. + +# Remove this exit command when you are ready to run this Action +#exit 1 + +#================================================= +# FETCHING LATEST RELEASE AND ITS ASSETS +#================================================= + +# Fetching information +current_version=$(cat manifest.json | jq -j '.version|split("~")[0]') +repo=$(cat manifest.json | jq -j '.upstream.code|split("https://github.com/")[1]') +# Some jq magic is needed, because the latest upstream release is not always the latest version (e.g. security patches for older versions) +version=$(curl --silent "https://api.github.com/repos/$repo/releases" | jq -r '.[] | select( .prerelease != true ) | .tag_name' | sort -V | tail -1) +assets=($(curl --silent "https://api.github.com/repos/$repo/releases" | jq -r '[ .[] | select(.tag_name=="'$version'").assets[].browser_download_url ] | join(" ") | @sh' | tr -d "'")) + +# if [[ ${version:0:1} == "v" || ${version:0:1} == "V" ]]; then +# version=${version:1} +# fi + +# Setting up the environment variables +echo "Current version: $current_version" +echo "Latest release from upstream: $version" +echo "VERSION=$version" >> $GITHUB_ENV +# For the time being, let's assume the script will fail +echo "PROCEED=false" >> $GITHUB_ENV + +# Proceed only if the retrieved version is greater than the current one +if ! dpkg --compare-versions "$current_version" "lt" "$version" ; then + echo "::warning ::No new version available" + exit 0 +# Proceed only if a PR for this new version does not already exist +elif git ls-remote -q --exit-code --heads https://github.com/$GITHUB_REPOSITORY.git ci-auto-update-v$version ; then + echo "::warning ::A branch already exists for this update" + exit 0 +fi + +# Each release can hold multiple assets (e.g. binaries for different architectures, source code, etc.) +echo "${#assets[@]} available asset(s)" + +#================================================= +# UPDATE SOURCE FILES +#================================================= + +# Here we use the $assets variable to get the resources published in the upstream release. +# Here is an example for Grav, it has to be adapted in accordance with how the upstream releases look like. + +# Let's loop over the array of assets URLs +for asset_url in ${assets[@]}; do + +echo "Handling asset at $asset_url" + +# Assign the asset to a source file in conf/ directory +# Here we base the source file name upon a unique keyword in the assets url (admin vs. update) +# Leave $src empty to ignore the asset +case $asset_url in + *".gz"*) + src="arm64" + ;; + *".gz"*) + src="i386" + ;; + *".gz"*) + src="x86_64" + ;; +esac + +# If $src is not empty, let's process the asset +if [ ! -z "$src" ]; then + +# Create the temporary directory +tempdir="$(mktemp -d)" + +# Download sources and calculate checksum +filename=${asset_url##*/} +curl --silent -4 -L $asset_url -o "$tempdir/$filename" +checksum=$(sha256sum "$tempdir/$filename" | head -c 64) + +# Delete temporary directory +rm -rf $tempdir + +# Get extension +if [[ $filename == *.tar.gz ]]; then + extension=tar.gz +else + extension=${filename##*.} +fi + +# Rewrite source file +cat < conf/$src.src +SOURCE_URL=$asset_url +SOURCE_SUM=$checksum +SOURCE_SUM_PRG=sha256sum +SOURCE_FORMAT=$extension +SOURCE_IN_SUBDIR=false +SOURCE_EXTRACT=false +EOT +echo "... conf/$src.src updated" + +else +echo "... asset ignored" +fi + +done + +#================================================= +# SPECIFIC UPDATE STEPS +#================================================= + +# Any action on the app's source code can be done. +# The GitHub Action workflow takes care of committing all changes after this script ends. + +#================================================= +# GENERIC FINALIZATION +#================================================= + +# Install moreutils, needed for sponge +sudo apt-get install moreutils + +# Replace new version in manifest +echo "$(jq -s --indent 4 ".[] | .version = \"$version~ynh1\"" manifest.json)" > manifest.json + +# No need to update the README, yunohost-bot takes care of it + +# The Action will proceed only if the PROCEED environment variable is set to true +echo "PROCEED=true" >> $GITHUB_ENV +exit 0 From c42cc2d8da254e43b5f676bd4c895ef4e954ef97 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Thu, 16 Sep 2021 10:40:25 +0200 Subject: [PATCH 11/68] Update arm64.src --- conf/arm64.src | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/arm64.src b/conf/arm64.src index 855cd5e..76aefb5 100644 --- a/conf/arm64.src +++ b/conf/arm64.src @@ -3,5 +3,4 @@ SOURCE_SUM=05ce23e5a653eef8c9e4e3a187a21c5e21fb45606a924fdef744a60102baabe7 SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=gz SOURCE_IN_SUBDIR=false -SOURCE_FILENAME= SOURCE_EXTRACT=false From d144031238761cab175fe36e3f4514168cf1179e Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Thu, 16 Sep 2021 10:41:25 +0200 Subject: [PATCH 12/68] Update manifest.json --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index f5d60a6..2e0877b 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "Self-hosted remote torrent client", "fr": "Client torrent distant auto-hébergé" }, - "version": "1.3.6~ynh3", + "version": "1.3.6~ynh4", "url": "https://github.com/boypt/simple-torrent", "upstream": { "license": "AGPL-3.0-only", From 5ed189c9a7dcfb2fc20af4779c3799cb112612b0 Mon Sep 17 00:00:00 2001 From: Yunohost-Bot <> Date: Thu, 16 Sep 2021 08:41:32 +0000 Subject: [PATCH 13/68] Auto-update README --- README.md | 2 +- README_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 10293f0..518dfc3 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Shipped version:** 1.3.6~ynh3 +**Shipped version:** 1.3.6~ynh4 diff --git a/README_fr.md b/README_fr.md index f1e62e9..2df8afb 100644 --- a/README_fr.md +++ b/README_fr.md @@ -26,7 +26,7 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Version incluse :** 1.3.6~ynh3 +**Version incluse :** 1.3.6~ynh4 From 938e5086f1be2a4f9249facdb41db4898feb716d Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Fri, 17 Sep 2021 13:41:21 +0200 Subject: [PATCH 14/68] Update updater.sh --- .github/workflows/updater.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/updater.sh b/.github/workflows/updater.sh index 7344e2b..5eac8ad 100644 --- a/.github/workflows/updater.sh +++ b/.github/workflows/updater.sh @@ -63,13 +63,13 @@ echo "Handling asset at $asset_url" # Here we base the source file name upon a unique keyword in the assets url (admin vs. update) # Leave $src empty to ignore the asset case $asset_url in - *".gz"*) + *"cloud-torrent_linux_arm64_static.gz"*) src="arm64" ;; - *".gz"*) + *"cloud-torrent_linux_386_static.gz"*) src="i386" ;; - *".gz"*) + *"cloud-torrent_linux_amd64_static.gz"*) src="x86_64" ;; esac From 233637ba63a98f3c74c92c7e78b37c8f9ac8b108 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Fri, 17 Sep 2021 13:45:41 +0200 Subject: [PATCH 15/68] Update updater.sh --- .github/workflows/updater.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/updater.sh b/.github/workflows/updater.sh index 5eac8ad..9318b13 100644 --- a/.github/workflows/updater.sh +++ b/.github/workflows/updater.sh @@ -63,13 +63,13 @@ echo "Handling asset at $asset_url" # Here we base the source file name upon a unique keyword in the assets url (admin vs. update) # Leave $src empty to ignore the asset case $asset_url in - *"cloud-torrent_linux_arm64_static.gz"*) + *"arm64"*".gz"*) src="arm64" ;; - *"cloud-torrent_linux_386_static.gz"*) + *"386"*".gz"*) src="i386" ;; - *"cloud-torrent_linux_amd64_static.gz"*) + *"amd64"*".gz"*) src="x86_64" ;; esac From 8d7a7d51e4068b95ef318f6d9a932d1152d56bbb Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Fri, 17 Sep 2021 13:57:07 +0200 Subject: [PATCH 16/68] Update manifest.json --- manifest.json | 1 - 1 file changed, 1 deletion(-) diff --git a/manifest.json b/manifest.json index 2e0877b..69a2e24 100644 --- a/manifest.json +++ b/manifest.json @@ -30,7 +30,6 @@ { "name": "domain", "type": "domain", - "example": "domain.org" }, { "name": "path", From 3ea504069aa9027000a27a11ba0dfd1ff4997bd5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 17 Sep 2021 14:19:30 +0200 Subject: [PATCH 17/68] Upgrade to version 1.3.7 (#62) * Upgrade to v1.3.7 * Auto-update README Co-authored-by: yunohost-bot Co-authored-by: Yunohost-Bot <> --- README.md | 2 +- README_fr.md | 2 +- conf/arm64.src | 4 ++-- conf/i386.src | 5 ++--- conf/x86_64.src | 7 +++---- manifest.json | 4 ++-- 6 files changed, 11 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 518dfc3..33e9898 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Shipped version:** 1.3.6~ynh4 +**Shipped version:** 1.3.7~ynh1 diff --git a/README_fr.md b/README_fr.md index 2df8afb..af18d8c 100644 --- a/README_fr.md +++ b/README_fr.md @@ -26,7 +26,7 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Version incluse :** 1.3.6~ynh4 +**Version incluse :** 1.3.7~ynh1 diff --git a/conf/arm64.src b/conf/arm64.src index 76aefb5..ec64ec3 100644 --- a/conf/arm64.src +++ b/conf/arm64.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://github.com/boypt/simple-torrent/releases/download/1.3.6/cloud-torrent_linux_arm64_static.gz -SOURCE_SUM=05ce23e5a653eef8c9e4e3a187a21c5e21fb45606a924fdef744a60102baabe7 +SOURCE_URL=https://github.com/boypt/simple-torrent/releases/download/1.3.7/cloud-torrent_linux_arm64_static.gz +SOURCE_SUM=3a10c51496650326d48e4b2288407857e8c01b916f93acbfa7e0850170914091 SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=gz SOURCE_IN_SUBDIR=false diff --git a/conf/i386.src b/conf/i386.src index 10c5bfe..6078e37 100644 --- a/conf/i386.src +++ b/conf/i386.src @@ -1,7 +1,6 @@ -SOURCE_URL=https://github.com/boypt/simple-torrent/releases/download/1.3.6/cloud-torrent_linux_386_static.gz -SOURCE_SUM=4ea80bccb38fae6b97c88b2e4c3bcb5173e38f546034b30fcec00c704a3a4b56 +SOURCE_URL=https://github.com/boypt/simple-torrent/releases/download/1.3.7/cloud-torrent_linux_386_static.gz +SOURCE_SUM=84fca011f5978808c9e113324dda4a5fa5f36df82cac55629569a00e7768e853 SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=gz SOURCE_IN_SUBDIR=false -SOURCE_FILENAME= SOURCE_EXTRACT=false diff --git a/conf/x86_64.src b/conf/x86_64.src index 6aee445..a62e201 100644 --- a/conf/x86_64.src +++ b/conf/x86_64.src @@ -1,7 +1,6 @@ -SOURCE_URL=https://github.com/boypt/simple-torrent/releases/download/1.3.6/cloud-torrent_linux_amd64_static.gz -SOURCE_SUM=57fff18227be6528873d9827fc6fe50ead1329701dbf4966428518d0a0f2b101 +SOURCE_URL=https://github.com/boypt/simple-torrent/releases/download/1.3.7/cloud-torrent_linux_amd64_static.gz +SOURCE_SUM=2f33110646b4448ea8122cdd770c9a1992964423f64f0e996d1cbbb2f8c01099 SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=gz SOURCE_IN_SUBDIR=false -SOURCE_FILENAME= -SOURCE_EXTRACT=false \ No newline at end of file +SOURCE_EXTRACT=false diff --git a/manifest.json b/manifest.json index 69a2e24..471ddcf 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "Self-hosted remote torrent client", "fr": "Client torrent distant auto-hébergé" }, - "version": "1.3.6~ynh4", + "version": "1.3.7~ynh1", "url": "https://github.com/boypt/simple-torrent", "upstream": { "license": "AGPL-3.0-only", @@ -26,7 +26,7 @@ "nginx" ], "arguments": { - "install" : [ + "install": [ { "name": "domain", "type": "domain", From a01e7a24d3131eb09e3060500786faba68aa9d96 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Fri, 17 Sep 2021 14:25:39 +0200 Subject: [PATCH 18/68] Update manifest.json --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 69a2e24..8212669 100644 --- a/manifest.json +++ b/manifest.json @@ -29,7 +29,7 @@ "install" : [ { "name": "domain", - "type": "domain", + "type": "domain" }, { "name": "path", From 7bda08649249bc6d0eacf3fa37e84b06dae7341b Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 19 Sep 2021 10:10:22 +0200 Subject: [PATCH 19/68] Update check_process --- check_process | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/check_process b/check_process index f7fbeaa..31ee622 100644 --- a/check_process +++ b/check_process @@ -23,4 +23,5 @@ Notification=none ;;; Upgrade options ; commit=295026023fdb74f5bf210093f5b0622bae2982f3 name= Upgrade to 1.2.12 (#10) - manifest_arg=domain=DOMAIN&path=PATH&admin=USER&language=fr&is_public=1&password=pass&port=4533& \ No newline at end of file + manifest_arg=domain=DOMAIN&path=PATH&admin=USER&language=fr&is_public=1&password=pass&port=4533& + \ No newline at end of file From bb2042435fe479396d4ecbded8e446d60263a2ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Wed, 3 Nov 2021 13:44:32 +0100 Subject: [PATCH 20/68] keep config (#67) * Update upgrade --- check_process | 3 +++ scripts/upgrade | 10 +++------- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/check_process b/check_process index 31ee622..f3e8ed7 100644 --- a/check_process +++ b/check_process @@ -14,6 +14,7 @@ setup_public=1 upgrade=1 upgrade=1 from_commit=295026023fdb74f5bf210093f5b0622bae2982f3 + upgrade=1 from_commit=bbce7cfa6cb8916671a4fec9e8a73095f74a0c9d backup_restore=1 multi_instance=1 change_url=1 @@ -23,5 +24,7 @@ Notification=none ;;; Upgrade options ; commit=295026023fdb74f5bf210093f5b0622bae2982f3 name= Upgrade to 1.2.12 (#10) + ; commit=bbce7cfa6cb8916671a4fec9e8a73095f74a0c9d + name= Upgrade to 1.3.7 (#63) manifest_arg=domain=DOMAIN&path=PATH&admin=USER&language=fr&is_public=1&password=pass&port=4533& \ No newline at end of file diff --git a/scripts/upgrade b/scripts/upgrade index 3e414b7..b7e46f0 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -86,11 +86,8 @@ if [ "$upgrade_type" == "UPGRADE_APP" ] then ynh_script_progression --message="Upgrading source files..." --weight=5 - # Remove the app directory securely - ynh_secure_remove --file="$final_path" - # Download, check integrity, uncompress and patch the source from app.src - ynh_setup_source --dest_dir=$final_path --source_id="$architecture" + ynh_setup_source --dest_dir=$final_path --source_id="$architecture" --keep="$final_path/config.yml" pushd "$final_path" gzip --decompress $(ynh_detect_arch).gz @@ -114,9 +111,9 @@ ynh_add_nginx_config #================================================= # MODIFY A CONFIG FILE #================================================= -ynh_script_progression --message="Modifying a config file..." --weight=1 +# ynh_script_progression --message="Modifying a config file..." --weight=1 -ynh_add_config --template="../conf/config.default.yml" --destination="$final_path/config.yml" +# ynh_add_config --template="../conf/config.default.yml" --destination="$final_path/config.yml" #================================================= # CREATE DIRECTORIES @@ -127,7 +124,6 @@ mkdir -p /home/yunohost.app/$app/{torrents,downloads} chown -R $app:www-data /home/yunohost.app/$app chmod 755 /home/yunohost.app/$app/{torrents,downloads} -#================================================= #================================================= # SETUP SYSTEMD #================================================= From 0ea913c7d5dd46dda96157205a4220b5156d088d Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Wed, 3 Nov 2021 13:46:05 +0100 Subject: [PATCH 21/68] Update manifest.json --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 09c8472..7c81edc 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "Self-hosted remote torrent client", "fr": "Client torrent distant auto-hébergé" }, - "version": "1.3.7~ynh1", + "version": "1.3.7~ynh2", "url": "https://github.com/boypt/simple-torrent", "upstream": { "license": "AGPL-3.0-only", From 333fcefbf77bbd0ee5b9767a682aa14f4faed932 Mon Sep 17 00:00:00 2001 From: Yunohost-Bot <> Date: Wed, 3 Nov 2021 12:46:12 +0000 Subject: [PATCH 22/68] Auto-update README --- README.md | 2 +- README_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 33e9898..29d2d95 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Shipped version:** 1.3.7~ynh1 +**Shipped version:** 1.3.7~ynh2 diff --git a/README_fr.md b/README_fr.md index af18d8c..48bcd0b 100644 --- a/README_fr.md +++ b/README_fr.md @@ -26,7 +26,7 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Version incluse :** 1.3.7~ynh1 +**Version incluse :** 1.3.7~ynh2 From 9c48e2947f7762853ed7d7fb24b660fc640be3dd Mon Sep 17 00:00:00 2001 From: Yunohost-Bot <> Date: Wed, 3 Nov 2021 12:49:02 +0000 Subject: [PATCH 23/68] Auto-update README --- README.md | 1 + README_fr.md | 1 + 2 files changed, 2 insertions(+) diff --git a/README.md b/README.md index 17d3530..0ec1d21 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). **Shipped version:** 1.3.9~ynh2 + ## Screenshots ![](./doc/screenshots/64239393-bdbb6480-cf32-11e9-9269-d8d10e7c0dc7.png) diff --git a/README_fr.md b/README_fr.md index e42e801..5dd1746 100644 --- a/README_fr.md +++ b/README_fr.md @@ -29,6 +29,7 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). **Version incluse :** 1.3.9~ynh2 + ## Captures d'écran ![](./doc/screenshots/64239393-bdbb6480-cf32-11e9-9269-d8d10e7c0dc7.png) From b8b232d644bf29eb80bc87e60f885f603541d33a Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 4 Dec 2021 23:51:20 +0100 Subject: [PATCH 24/68] 4.3 --- conf/nginx.conf | 5 ----- manifest.json | 2 +- scripts/remove | 12 ++++++------ scripts/restore | 3 +-- 4 files changed, 8 insertions(+), 14 deletions(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index d8ac826..f1a7df9 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,10 +1,5 @@ #sub_path_only rewrite ^__PATH__$ __PATH__/ permanent; location __PATH__/ { - - # Force usage of https - if ($scheme = http) { - rewrite ^ https://$server_name$request_uri? permanent; - } proxy_pass http://127.0.0.1:__PORT__/; proxy_redirect off; diff --git a/manifest.json b/manifest.json index 1aadb45..148ae26 100644 --- a/manifest.json +++ b/manifest.json @@ -19,7 +19,7 @@ "name": "eric_G" }, "requirements": { - "yunohost": ">= 4.2.7" + "yunohost": ">= 4.3.0" }, "multi_instance": true, "services": [ diff --git a/scripts/remove b/scripts/remove index 8fef2b5..8ab2c82 100644 --- a/scripts/remove +++ b/scripts/remove @@ -55,12 +55,12 @@ ynh_secure_remove --file="$final_path" # REMOVE DATA DIR #================================================= -# # Remove the app data directory with the command `yunohost app remove --purge` -# if [ "${YNH_APP_PURGE:-0}" -eq 1 ] -# then -# ynh_script_progression --message="Removing $app data directory..." --weight=2 -# ynh_secure_remove --file="$datadir" -# fi +# Remove the data directory if --purge option is used +if [ "${YNH_APP_PURGE:-0}" -eq 1 ] +then + ynh_script_progression --message="Removing app data directory..." --weight=1 + ynh_secure_remove --file="$datadir" +fi #================================================= # REMOVE NGINX CONFIGURATION diff --git a/scripts/restore b/scripts/restore index 9e0b1c3..7c8123b 100644 --- a/scripts/restore +++ b/scripts/restore @@ -34,8 +34,7 @@ datadir=$(ynh_app_setting_get --app=$app --key=datadir) #================================================= ynh_script_progression --message="Validating restoration parameters..." --weight=2 -test ! -d $final_path \ - || ynh_die --message="There is already a directory: $final_path " +test ! -d $final_path || ynh_die --message="There is already a directory: $final_path " #================================================= # STANDARD RESTORATION STEPS From 3ec1c52e5e09e7829900f029dbfeb12715915057 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 5 Dec 2021 11:49:17 +0100 Subject: [PATCH 25/68] Update manifest.json --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 148ae26..79b540b 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "Self-hosted remote torrent client", "fr": "Client torrent distant auto-hébergé" }, - "version": "1.3.9~ynh2", + "version": "1.3.9~ynh3", "url": "https://github.com/boypt/simple-torrent", "upstream": { "license": "AGPL-3.0-only", From 9f0dce930d82a6ef267bec00f96536b0ae479e96 Mon Sep 17 00:00:00 2001 From: Yunohost-Bot <> Date: Sun, 5 Dec 2021 10:49:23 +0000 Subject: [PATCH 26/68] Auto-update README --- README.md | 2 +- README_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0ec1d21..33c3318 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Shipped version:** 1.3.9~ynh2 +**Shipped version:** 1.3.9~ynh3 diff --git a/README_fr.md b/README_fr.md index 5dd1746..d4f469e 100644 --- a/README_fr.md +++ b/README_fr.md @@ -26,7 +26,7 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Version incluse :** 1.3.9~ynh2 +**Version incluse :** 1.3.9~ynh3 From 064a014d0fc33700cf6116066c869725a4f4718c Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 14 Aug 2022 15:45:09 +0200 Subject: [PATCH 27/68] Update manifest.json --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 79b540b..968473f 100644 --- a/manifest.json +++ b/manifest.json @@ -19,7 +19,7 @@ "name": "eric_G" }, "requirements": { - "yunohost": ">= 4.3.0" + "yunohost": ">= 11.0.9" }, "multi_instance": true, "services": [ From 71b623efff3c38e4d8908274d63d34dce713ed7b Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Sun, 14 Aug 2022 13:45:14 +0000 Subject: [PATCH 28/68] Auto-update README --- README.md | 22 +++++++++++----------- README_fr.md | 30 +++++++++++++++++------------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 33c3318..8bb6949 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ It shall NOT be edited by hand. # Simple Torrent for YunoHost -[![Integration level](https://dash.yunohost.org/integration/simple-torrent.svg)](https://dash.yunohost.org/appci/app/simple-torrent) ![](https://ci-apps.yunohost.org/ci/badges/simple-torrent.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/simple-torrent.maintain.svg) +[![Integration level](https://dash.yunohost.org/integration/simple-torrent.svg)](https://dash.yunohost.org/appci/app/simple-torrent) ![Working status](https://ci-apps.yunohost.org/ci/badges/simple-torrent.status.svg) ![Maintenance status](https://ci-apps.yunohost.org/ci/badges/simple-torrent.maintain.svg) [![Install Simple Torrent with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=simple-torrent) *[Lire ce readme en français.](./README_fr.md)* @@ -33,11 +33,10 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). **Shipped version:** 1.3.9~ynh3 - ## Screenshots -![](./doc/screenshots/64239393-bdbb6480-cf32-11e9-9269-d8d10e7c0dc7.png) -![](./doc/screenshots/.DS_Store) +![Screenshot of Simple Torrent](./doc/screenshots/64239393-bdbb6480-cf32-11e9-9269-d8d10e7c0dc7.png) +![Screenshot of Simple Torrent](./doc/screenshots/.DS_Store) ## Disclaimers / important information @@ -53,21 +52,22 @@ You can also configure Simple Torrent by editing this file `/var/www/simple-torr ## Documentation and resources -* Official app website: https://github.com/boypt/simple-torrent -* Official admin documentation: https://github.com/boypt/simple-torrent/wiki -* Upstream app code repository: https://github.com/boypt/simple-torrent -* YunoHost documentation for this app: https://yunohost.org/app_simple-torrent -* Report a bug: https://github.com/YunoHost-Apps/simple-torrent_ynh/issues +* Official app website: +* Official admin documentation: +* Upstream app code repository: +* YunoHost documentation for this app: +* Report a bug: ## Developer info Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing). To try the testing branch, please proceed like that. -``` + +``` bash sudo yunohost app install https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug or sudo yunohost app upgrade simple-torrent -u https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug ``` -**More info regarding app packaging:** https://yunohost.org/packaging_apps \ No newline at end of file +**More info regarding app packaging:** diff --git a/README_fr.md b/README_fr.md index d4f469e..889bc27 100644 --- a/README_fr.md +++ b/README_fr.md @@ -1,10 +1,14 @@ + + # Simple Torrent pour YunoHost -[![Niveau d'intégration](https://dash.yunohost.org/integration/simple-torrent.svg)](https://dash.yunohost.org/appci/app/simple-torrent) ![](https://ci-apps.yunohost.org/ci/badges/simple-torrent.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/simple-torrent.maintain.svg) +[![Niveau d'intégration](https://dash.yunohost.org/integration/simple-torrent.svg)](https://dash.yunohost.org/appci/app/simple-torrent) ![Statut du fonctionnement](https://ci-apps.yunohost.org/ci/badges/simple-torrent.status.svg) ![Statut de maintenance](https://ci-apps.yunohost.org/ci/badges/simple-torrent.maintain.svg) [![Installer Simple Torrent avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=simple-torrent) *[Read this readme in english.](./README.md)* -*[Lire ce readme en français.](./README_fr.md)* > *Ce package vous permet d'installer Simple Torrent rapidement et simplement sur un serveur YunoHost. Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l'installer et en profiter.* @@ -26,14 +30,13 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Version incluse :** 1.3.9~ynh3 - +**Version incluse :** 1.3.9~ynh3 ## Captures d'écran -![](./doc/screenshots/64239393-bdbb6480-cf32-11e9-9269-d8d10e7c0dc7.png) -![](./doc/screenshots/.DS_Store) +![Capture d'écran de Simple Torrent](./doc/screenshots/64239393-bdbb6480-cf32-11e9-9269-d8d10e7c0dc7.png) +![Capture d'écran de Simple Torrent](./doc/screenshots/.DS_Store) ## Avertissements / informations importantes @@ -49,21 +52,22 @@ Vous pouvez configurer Simple Torrent en modifiant le fichier `/var/www/simple-t ## Documentations et ressources -* Site officiel de l'app : https://github.com/boypt/simple-torrent -* Documentation officielle de l'admin : https://github.com/boypt/simple-torrent/wiki -* Dépôt de code officiel de l'app : https://github.com/boypt/simple-torrent -* Documentation YunoHost pour cette app : https://yunohost.org/app_simple-torrent -* Signaler un bug : https://github.com/YunoHost-Apps/simple-torrent_ynh/issues +* Site officiel de l'app : +* Documentation officielle de l'admin : +* Dépôt de code officiel de l'app : +* Documentation YunoHost pour cette app : +* Signaler un bug : ## Informations pour les développeurs Merci de faire vos pull request sur la [branche testing](https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing). Pour essayer la branche testing, procédez comme suit. -``` + +``` bash sudo yunohost app install https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug ou sudo yunohost app upgrade simple-torrent -u https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug ``` -**Plus d'infos sur le packaging d'applications :** https://yunohost.org/packaging_apps \ No newline at end of file +**Plus d'infos sur le packaging d'applications :** From 8e1d5077e899e443f5e8f4658e9f3693bf6e3dc7 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Mon, 15 Aug 2022 18:27:42 +0200 Subject: [PATCH 29/68] Update upgrade --- scripts/upgrade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/upgrade b/scripts/upgrade index b7e46f0..8058570 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -87,7 +87,7 @@ then ynh_script_progression --message="Upgrading source files..." --weight=5 # Download, check integrity, uncompress and patch the source from app.src - ynh_setup_source --dest_dir=$final_path --source_id="$architecture" --keep="$final_path/config.yml" + ynh_setup_source --dest_dir=$final_path --source_id="$architecture" --keep="config.yml" pushd "$final_path" gzip --decompress $(ynh_detect_arch).gz From 4704fee2a9ba6e809639de18a4f45866dfb8d6a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sun, 2 Oct 2022 21:14:43 +0200 Subject: [PATCH 30/68] fix linter (#72) --- conf/{x86_64.src => amd64.src} | 0 scripts/_common.sh | 21 --------------------- scripts/install | 17 ++++++++--------- scripts/upgrade | 16 +++++++--------- 4 files changed, 15 insertions(+), 39 deletions(-) rename conf/{x86_64.src => amd64.src} (100%) diff --git a/conf/x86_64.src b/conf/amd64.src similarity index 100% rename from conf/x86_64.src rename to conf/amd64.src diff --git a/scripts/_common.sh b/scripts/_common.sh index 8fc49a5..944a65e 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -15,24 +15,3 @@ #================================================= # FUTURE OFFICIAL HELPERS #================================================= - -# Check the architecture -# -# example: architecture=$(ynh_detect_arch) -# -# usage: ynh_detect_arch -# -# Requires YunoHost version 2.2.4 or higher. -ynh_detect_arch() { - local architecture - if [ -n "$(uname -m | grep arm64)" ] || [ -n "$(uname -m | grep aarch64)" ]; then - architecture="arm64" - elif [ -n "$(uname -m | grep 86)" ]; then - architecture="i386" - elif [ -n "$(uname -m | grep 64)" ]; then - architecture="x86_64" - else - architecture="unknown" - fi - echo $architecture -} diff --git a/scripts/install b/scripts/install index 12beb0c..3256489 100644 --- a/scripts/install +++ b/scripts/install @@ -23,7 +23,6 @@ ynh_abort_if_errors domain=$YNH_APP_ARG_DOMAIN path_url=$YNH_APP_ARG_PATH is_public=$YNH_APP_ARG_IS_PUBLIC -architecture=$(ynh_detect_arch) app=$YNH_APP_INSTANCE_NAME @@ -32,11 +31,11 @@ app=$YNH_APP_INSTANCE_NAME #================================================= ynh_script_progression --message="Validating installation parameters..." --weight=1 -# Check machine architecture (in particular, we don't support ARM 32bit machines) -if [ $architecture == "unknown" ] -then - ynh_die --message="Sorry, this app cannot be installed on a 32-bit ARM machine." -fi +# Stop if architecture is 32-bit ARM +case $YNH_ARCH in + arm|armhf) ynh_die --message="Sorry, your architecture $YNH_ARCH is not supported by $app. Aborting.";; + *) ;; +esac final_path=/var/www/$app test ! -e "$final_path" || ynh_die --message="This path already contains a folder" @@ -86,11 +85,11 @@ ynh_script_progression --message="Setting up source files..." --weight=4 ynh_app_setting_set --app=$app --key=final_path --value=$final_path # Download, check integrity, uncompress and patch the source from app.src -ynh_setup_source --dest_dir=$final_path --source_id="$architecture" +ynh_setup_source --dest_dir=$final_path --source_id=$YNH_ARCH pushd "$final_path" - gzip --decompress $(ynh_detect_arch).gz - mv $(ynh_detect_arch) $app + gzip --decompress $YNH_ARCH.gz + mv $YNH_ARCH $app popd chmod 750 "$final_path" diff --git a/scripts/upgrade b/scripts/upgrade index 8058570..d93dfba 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -21,7 +21,6 @@ path_url=$(ynh_app_setting_get --app=$app --key=path) final_path=$(ynh_app_setting_get --app=$app --key=final_path) port=$(ynh_app_setting_get --app=$app --key=port) peer_port=$(ynh_app_setting_get --app=$app --key=peer_port) -architecture=$(ynh_detect_arch) #================================================= # CHECK VERSION @@ -48,11 +47,10 @@ ynh_abort_if_errors #================================================= ynh_script_progression --message="Ensuring downward compatibility..." --weight=1 -# Check machine architecture (in particular, we don't support ARM 32bit machines) -if [ $architecture == "unknown" ] -then - ynh_die --message="Sorry, this app cannot be installed on a 32-bit ARM machine." -fi +case $YNH_ARCH in + arm|armhf) ynh_die --message="Sorry, your architecture $YNH_ARCH is not supported by $app. Aborting.";; + *) ;; +esac # Cleaning legacy permissions if ynh_legacy_permissions_exists; then @@ -87,11 +85,11 @@ then ynh_script_progression --message="Upgrading source files..." --weight=5 # Download, check integrity, uncompress and patch the source from app.src - ynh_setup_source --dest_dir=$final_path --source_id="$architecture" --keep="config.yml" + ynh_setup_source --dest_dir=$final_path --source_id=$YNH_ARCH --keep="config.yml" pushd "$final_path" - gzip --decompress $(ynh_detect_arch).gz - mv $(ynh_detect_arch) $app + gzip --decompress $YNH_ARCH.gz + mv $YNH_ARCH $app popd fi From 81ce910fda7cc7cf3a8dd3eba026490276aaefff Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Tue, 4 Oct 2022 09:14:20 +0200 Subject: [PATCH 31/68] Update manifest.json --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 968473f..a113cff 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "Self-hosted remote torrent client", "fr": "Client torrent distant auto-hébergé" }, - "version": "1.3.9~ynh3", + "version": "1.3.9~ynh4", "url": "https://github.com/boypt/simple-torrent", "upstream": { "license": "AGPL-3.0-only", From 7052bdd04c4bf17e6495f1aa0e4c30177ec2f733 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Tue, 4 Oct 2022 07:14:26 +0000 Subject: [PATCH 32/68] Auto-update README --- README.md | 2 +- README_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8bb6949..42e4757 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Shipped version:** 1.3.9~ynh3 +**Shipped version:** 1.3.9~ynh4 *(:warning: This is the `testing` branch. The [`master` branch](https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/master) used in the catalog is currently on version 1.3.9\~ynh3.)* ## Screenshots diff --git a/README_fr.md b/README_fr.md index 889bc27..a1cf53e 100644 --- a/README_fr.md +++ b/README_fr.md @@ -30,7 +30,7 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Version incluse :** 1.3.9~ynh3 +**Version incluse :** 1.3.9~ynh4 *(:warning: Il s'agit de la branche `testing`. La [branche `master`](https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/master) utilisée dans le catalogue est actuellement en 1.3.9\~ynh3.)* ## Captures d'écran From 40fd0c9e91adb7ee81a5e164591366b8ea372d81 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Fri, 4 Nov 2022 16:32:53 +0000 Subject: [PATCH 33/68] Auto-update README --- README.md | 2 -- README_fr.md | 3 +-- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index ae3a84e..b8d83ac 100644 --- a/README.md +++ b/README.md @@ -32,8 +32,6 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). **Shipped version:** 1.3.9~ynh4 - - ## Screenshots ![Screenshot of Simple Torrent](./doc/screenshots/64239393-bdbb6480-cf32-11e9-9269-d8d10e7c0dc7.png) diff --git a/README_fr.md b/README_fr.md index aab5f11..b9810d5 100644 --- a/README_fr.md +++ b/README_fr.md @@ -30,8 +30,7 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Version incluse :** 1.3.9~ynh4 - +**Version incluse :** 1.3.9~ynh4 ## Captures d'écran From 8dbed782658429ca7987696d7c05ff607538ba5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Fri, 20 Jan 2023 19:51:15 +0100 Subject: [PATCH 34/68] Fix linter --- doc/.DS_Store | Bin 6148 -> 6148 bytes ...9-9269-d8d10e7c0dc7.png => screenshot.png} | Bin manifest.json | 1 - 3 files changed, 1 deletion(-) rename doc/screenshots/{64239393-bdbb6480-cf32-11e9-9269-d8d10e7c0dc7.png => screenshot.png} (100%) diff --git a/doc/.DS_Store b/doc/.DS_Store index fc7b8a40949f5488c93362acd831b939baeb97b0..348f7e8348ec71ed8f14f50e2f6a64addbbe1622 100644 GIT binary patch delta 142 zcmZoMXffDe$fUd@sURn_xWvHV8Y2@k3o9EtJ109gdu(tZ+`RlQ1~6b`gwPDU aP#Q*cPv&8g+U&@DjAdej?Phk4zx)8EBOfRL delta 200 zcmZoMXffDe$mI4lsURn_xWvHV1|t(Q3o9Et2PYRN4<{cdPi$~TetB?7Vo7PSQ({rP zfJ|^^N@`MKQFvxbNk&L&o@-8OS!$ktkxybt>f{h6&-7@JhJeJ944@)TWrx%T1`y!n z;EWfLsIE3PHq}uuHZiHyQK&XIH_%ZqF*d8M<>cUyRCf!CD{bnVHG9d@Wy=p82J2#A cWQ5QRf>0Vp9huC-B(<4^`54P)c8 Date: Fri, 20 Jan 2023 19:51:49 +0100 Subject: [PATCH 35/68] Update manifest.json --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 2db9034..06c82d0 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "Self-hosted remote torrent client", "fr": "Client torrent distant auto-hébergé" }, - "version": "1.3.9~ynh4", + "version": "1.3.9~ynh5", "url": "https://github.com/boypt/simple-torrent", "upstream": { "license": "AGPL-3.0-only", From 81f2ba50cae9954dfa3fc6fd0511bf19f49bae0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sat, 18 Feb 2023 08:05:24 +0100 Subject: [PATCH 36/68] Delete .DS_Store --- .DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 145651ddf37dd0eae5fb377facacdeb2a2c56f1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%}&BV5Z(pU5@Y0GBFDXW;{Ykj$)rI%cr&TdgBoZpktVfEph&dV^fmO2d;(v` zncc0C$ib5_GDCL1nVp&4&X=%1j4|Gw1ue#Ej4=xuB1dJ3;P6sc$pj;EoMSrnBk6uqH@QUX)JsOb z(a)reK6TGO4~O%9ZRbeFi5JGhiAoNGA%t9AgmEC}T{(+`shY>t4qT_&uhrAkw)Y#t zZnv|BNIRWoL$vLKEUQ|(d#%Hh!QI1S`jkDtXnr}+uVmX`0k5E#^6uS99Le|=MvCYn zijWu}28aP-V5Jx^$AGoDQdLv2!~iky69#a95YP}EgSkevbwG#LXY^MPQ9#GH1fnqL z7|b<-2ZZZXK%L6X6NBq?7#AkaF_>%A>5QwDVIH$`@p$2Cbr=^aoN-4Z^~3-%u*g7J zn>9TDkKr$~^pU@qLKZPV4E!?&c%|p|x=@rkTfdcuXRUxXfQEu`IVvEaFI)n^z Date: Sat, 18 Feb 2023 08:05:40 +0100 Subject: [PATCH 37/68] Delete .DS_Store --- doc/.DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 doc/.DS_Store diff --git a/doc/.DS_Store b/doc/.DS_Store deleted file mode 100644 index 348f7e8348ec71ed8f14f50e2f6a64addbbe1622..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK!AiqG5S?wSO(;SS3Oz1(Em*0vh?h|74;aydN=eD7ZtPP6AQQ6WaWhtElz<*n9-D3vQ)+tsRDtyORRk(&B> zkWaE+FutbVg;Ghlu!Hb2j;4e9?x{-iAWoyPPKbvQhTL4m=}=93YLX5!o$H$c*LB=M zy)m10+s94W?zHDkIqP;?O?lMr%;&DNw|{VQK6p%?QuS&m75MdO*|E5QH#F9)?!_Oc ziAo Date: Sat, 18 Feb 2023 08:05:50 +0100 Subject: [PATCH 38/68] Delete .DS_Store --- doc/screenshots/.DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 doc/screenshots/.DS_Store diff --git a/doc/screenshots/.DS_Store b/doc/screenshots/.DS_Store deleted file mode 100644 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 Date: Sat, 18 Feb 2023 15:30:10 +0100 Subject: [PATCH 39/68] V2 (#76) * Auto-update README * v2 * v2 * Update change_url * Delete .DS_Store * v2 * Auto-update README * Auto-update README * fix * Update restore --------- Co-authored-by: yunohost-bot --- README.md | 17 +--- README_fr.md | 35 +++---- check_process | 30 ------ conf/config.default.yml | 2 +- conf/systemd.service | 4 +- doc/{DISCLAIMER.md => ADMIN.md} | 0 doc/{DISCLAIMER_fr.md => ADMIN_fr.md} | 0 manifest.json | 50 ---------- manifest.toml | 54 +++++++++++ scripts/backup | 22 +---- scripts/change_url | 11 --- scripts/install | 134 ++++---------------------- scripts/remove | 66 +------------ scripts/restore | 91 +++-------------- scripts/upgrade | 93 +++--------------- tests.toml | 10 ++ 16 files changed, 128 insertions(+), 491 deletions(-) delete mode 100644 check_process rename doc/{DISCLAIMER.md => ADMIN.md} (100%) rename doc/{DISCLAIMER_fr.md => ADMIN_fr.md} (100%) delete mode 100644 manifest.json create mode 100644 manifest.toml create mode 100644 tests.toml diff --git a/README.md b/README.md index b8d83ac..0e9abc0 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,8 @@ It shall NOT be edited by hand. # Simple Torrent for YunoHost -[![Integration level](https://dash.yunohost.org/integration/simple-torrent.svg)](https://dash.yunohost.org/appci/app/simple-torrent) ![Working status](https://ci-apps.yunohost.org/ci/badges/simple-torrent.status.svg) ![Maintenance status](https://ci-apps.yunohost.org/ci/badges/simple-torrent.maintain.svg) +[![Integration level](https://dash.yunohost.org/integration/simple-torrent.svg)](https://dash.yunohost.org/appci/app/simple-torrent) ![Working status](https://ci-apps.yunohost.org/ci/badges/simple-torrent.status.svg) ![Maintenance status](https://ci-apps.yunohost.org/ci/badges/simple-torrent.maintain.svg) + [![Install Simple Torrent with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=simple-torrent) *[Lire ce readme en français.](./README_fr.md)* @@ -34,20 +35,8 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). ## Screenshots -![Screenshot of Simple Torrent](./doc/screenshots/64239393-bdbb6480-cf32-11e9-9269-d8d10e7c0dc7.png) ![Screenshot of Simple Torrent](./doc/screenshots/.DS_Store) - -## Disclaimers / important information - -## Configuration - -Most of the items can be edited in Web-UI on the fly in the config board. - -You can also configure Simple Torrent by editing this file `/var/www/simple-torrent/config.yml` using the [documentation](https://github.com/boypt/simple-torrent/wiki/Config-File). - -## Limitations - -- This app cannot be installed on a 32-bit ARM machine. +![Screenshot of Simple Torrent](./doc/screenshots/screenshot.png) ## Documentation and resources diff --git a/README_fr.md b/README_fr.md index b9810d5..9b814ba 100644 --- a/README_fr.md +++ b/README_fr.md @@ -5,15 +5,16 @@ It shall NOT be edited by hand. # Simple Torrent pour YunoHost -[![Niveau d'intégration](https://dash.yunohost.org/integration/simple-torrent.svg)](https://dash.yunohost.org/appci/app/simple-torrent) ![Statut du fonctionnement](https://ci-apps.yunohost.org/ci/badges/simple-torrent.status.svg) ![Statut de maintenance](https://ci-apps.yunohost.org/ci/badges/simple-torrent.maintain.svg) +[![Niveau d’intégration](https://dash.yunohost.org/integration/simple-torrent.svg)](https://dash.yunohost.org/appci/app/simple-torrent) ![Statut du fonctionnement](https://ci-apps.yunohost.org/ci/badges/simple-torrent.status.svg) ![Statut de maintenance](https://ci-apps.yunohost.org/ci/badges/simple-torrent.maintain.svg) + [![Installer Simple Torrent avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=simple-torrent) *[Read this readme in english.](./README.md)* -> *Ce package vous permet d'installer Simple Torrent rapidement et simplement sur un serveur YunoHost. -Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l'installer et en profiter.* +> *Ce package vous permet d’installer Simple Torrent rapidement et simplement sur un serveur YunoHost. +Si vous n’avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l’installer et en profiter.* -## Vue d'ensemble +## Vue d’ensemble SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. @@ -32,28 +33,16 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). **Version incluse :** 1.3.9~ynh4 -## Captures d'écran +## Captures d’écran -![Capture d'écran de Simple Torrent](./doc/screenshots/64239393-bdbb6480-cf32-11e9-9269-d8d10e7c0dc7.png) -![Capture d'écran de Simple Torrent](./doc/screenshots/.DS_Store) - -## Avertissements / informations importantes - -## Configuration - -La plupart des éléments peuvent être modifiés à la volée dans Web-UI dans la page de configuration. - -Vous pouvez configurer Simple Torrent en modifiant le fichier `/var/www/simple-torrent/config.yml` en vous aidant de la [documentation](https://github.com/boypt/simple-torrent/wiki/Config-File). - -## Limitations - -- Cette application ne peut pas être installée sur une machine ARM 32 bits. +![Capture d’écran de Simple Torrent](./doc/screenshots/.DS_Store) +![Capture d’écran de Simple Torrent](./doc/screenshots/screenshot.png) ## Documentations et ressources -* Site officiel de l'app : -* Documentation officielle de l'admin : -* Dépôt de code officiel de l'app : +* Site officiel de l’app : +* Documentation officielle de l’admin : +* Dépôt de code officiel de l’app : * Documentation YunoHost pour cette app : * Signaler un bug : @@ -69,4 +58,4 @@ ou sudo yunohost app upgrade simple-torrent -u https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug ``` -**Plus d'infos sur le packaging d'applications :** +**Plus d’infos sur le packaging d’applications :** \ No newline at end of file diff --git a/check_process b/check_process deleted file mode 100644 index f3e8ed7..0000000 --- a/check_process +++ /dev/null @@ -1,30 +0,0 @@ -;; Test complet - ; Manifest - domain="domain.tld" - path="/path" - is_public=1 - admin="john" - password="pass" - ; Checks - pkg_linter=1 - setup_sub_dir=1 - setup_root=1 - setup_nourl=0 - setup_private=1 - setup_public=1 - upgrade=1 - upgrade=1 from_commit=295026023fdb74f5bf210093f5b0622bae2982f3 - upgrade=1 from_commit=bbce7cfa6cb8916671a4fec9e8a73095f74a0c9d - backup_restore=1 - multi_instance=1 - change_url=1 -;;; Options -Email= -Notification=none -;;; Upgrade options - ; commit=295026023fdb74f5bf210093f5b0622bae2982f3 - name= Upgrade to 1.2.12 (#10) - ; commit=bbce7cfa6cb8916671a4fec9e8a73095f74a0c9d - name= Upgrade to 1.3.7 (#63) - manifest_arg=domain=DOMAIN&path=PATH&admin=USER&language=fr&is_public=1&password=pass&port=4533& - \ No newline at end of file diff --git a/conf/config.default.yml b/conf/config.default.yml index c9949db..a529ea6 100644 --- a/conf/config.default.yml +++ b/conf/config.default.yml @@ -41,7 +41,7 @@ EnableUpload: true EnableSeeding: true # EnableSeeding Whether upload even after there's nothing further for us. By default uploading is not altruistic, we'll only upload to encourage the peer to reciprocate. -IncomingPort: __PEER_PORT__ +IncomingPort: __PORT_PEER__ # IncomingPort The port SimpleTorrent listens to. DoneCmd: "" diff --git a/conf/systemd.service b/conf/systemd.service index aa6f6c5..ea2bfe9 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -7,8 +7,8 @@ Type=simple User=__APP__ Group=__APP__ Environment=PORT=__PORT__ -WorkingDirectory=__FINALPATH__ -ExecStart=__FINALPATH__/__APP__ -c __FINALPATH__/config.yml --host 127.0.0.1 +WorkingDirectory=__INSTALL_DIR__ +ExecStart=__INSTALL_DIR__/__APP__ -c __INSTALL_DIR__/config.yml --host 127.0.0.1 Restart=always RestartSec=3 diff --git a/doc/DISCLAIMER.md b/doc/ADMIN.md similarity index 100% rename from doc/DISCLAIMER.md rename to doc/ADMIN.md diff --git a/doc/DISCLAIMER_fr.md b/doc/ADMIN_fr.md similarity index 100% rename from doc/DISCLAIMER_fr.md rename to doc/ADMIN_fr.md diff --git a/manifest.json b/manifest.json deleted file mode 100644 index 06c82d0..0000000 --- a/manifest.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "Simple Torrent", - "id": "simple-torrent", - "packaging_format": 1, - "description": { - "en": "Self-hosted remote torrent client", - "fr": "Client torrent distant auto-hébergé" - }, - "version": "1.3.9~ynh5", - "url": "https://github.com/boypt/simple-torrent", - "upstream": { - "license": "AGPL-3.0-only", - "admindoc": "https://github.com/boypt/simple-torrent/wiki", - "code": "https://github.com/boypt/simple-torrent" - }, - "license": "AGPL-3.0-only", - "maintainer": { - "name": "eric_G" - }, - "requirements": { - "yunohost": ">= 11.0.9" - }, - "multi_instance": true, - "services": [ - "nginx" - ], - "arguments": { - "install": [ - { - "name": "domain", - "type": "domain" - }, - { - "name": "path", - "type": "path", - "example": "/simple-torrent", - "default": "/simple-torrent" - }, - { - "name": "is_public", - "type": "boolean", - "help": { - "en": "If enabled, Simple Torrent will be accessible by people who do not have an account. This can be changed later via the webadmin.", - "fr": "Si cette case est cochée, Simple Torrent sera accessible aux personnes n’ayant pas de compte. Vous pourrez changer ceci plus tard via la webadmin." - }, - "default": true - } - ] - } -} diff --git a/manifest.toml b/manifest.toml new file mode 100644 index 0000000..790157d --- /dev/null +++ b/manifest.toml @@ -0,0 +1,54 @@ +packaging_format = 2 + +id = "simple-torrent" +name = "Simple Torrent" +description.en = "Self-hosted remote torrent client" +description.fr = "Client torrent distant auto-hébergé" + +version = "1.3.9~ynh4" + +maintainers = ["eric_G"] + +[upstream] +license = "AGPL-3.0-only" +admindoc = "https://github.com/boypt/simple-torrent/wiki" +code = "https://github.com/boypt/simple-torrent" + +[integration] +yunohost = ">= 11.1.7" +architectures = ["amd64","i386", "arm64"] +multi_instance = true +ldap = false +sso = false +disk = "50M" +ram.build = "50M" +ram.runtime = "50M" + +[install] + [install.domain] + type = "domain" + + [install.path] + type = "path" + default = "/simple-torrent" + + [install.init_main_permission] + help.en = "If enabled, Simple Torrent will be accessible by people who do not have an account. This can be changed later via the webadmin." + help.fr = "Si cette case est cochée, Simple Torrent sera accessible aux personnes n’ayant pas de compte. Vous pourrez changer ceci plus tard via la webadmin." + type = "group" + default = "visitors" + +[resources] + [resources.system_user] + + [resources.install_dir] + + [resources.data_dir] + + [resources.ports] + main.default = 3000 + peer.default = 50007 + peer.exposed = "Both" + + [resources.permissions] + main.url = "/" diff --git a/scripts/backup b/scripts/backup index a4ec5ef..2d322c2 100644 --- a/scripts/backup +++ b/scripts/backup @@ -9,24 +9,6 @@ source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - -#================================================= -# LOAD SETTINGS -#================================================= -ynh_print_info --message="Loading installation settings..." - -app=$YNH_APP_INSTANCE_NAME - -final_path=$(ynh_app_setting_get --app=$app --key=final_path) -domain=$(ynh_app_setting_get --app=$app --key=domain) -datadir=$(ynh_app_setting_get --app=$app --key=datadir) - #================================================= # DECLARE DATA AND CONF FILES TO BACKUP #================================================= @@ -36,13 +18,13 @@ ynh_print_info --message="Declaring files to be backed up..." # BACKUP THE APP MAIN DIR #================================================= -ynh_backup --src_path="$final_path" +ynh_backup --src_path="$install_dir" #================================================= # BACKUP DATA #================================================= -ynh_backup --src_path="$datadir" --is_big +ynh_backup --src_path="$data_dir" --is_big #================================================= # BACKUP THE NGINX CONFIGURATION diff --git a/scripts/change_url b/scripts/change_url index 391f4b0..6477fa0 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -19,17 +19,6 @@ old_path=$YNH_APP_OLD_PATH new_domain=$YNH_APP_NEW_DOMAIN new_path=$YNH_APP_NEW_PATH -app=$YNH_APP_INSTANCE_NAME - -#================================================= -# LOAD SETTINGS -#================================================= -ynh_script_progression --message="Loading installation settings..." --weight=1 - -# Needed for helper "ynh_add_nginx_config" -final_path=$(ynh_app_setting_get --app=$app --key=final_path) -port=$(ynh_app_setting_get --app=$app --key=port) - #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #================================================= diff --git a/scripts/install b/scripts/install index 3256489..d443955 100644 --- a/scripts/install +++ b/scripts/install @@ -9,137 +9,55 @@ source _common.sh source /usr/share/yunohost/helpers -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - -#================================================= -# RETRIEVE ARGUMENTS FROM THE MANIFEST -#================================================= - -domain=$YNH_APP_ARG_DOMAIN -path_url=$YNH_APP_ARG_PATH -is_public=$YNH_APP_ARG_IS_PUBLIC - -app=$YNH_APP_INSTANCE_NAME - -#================================================= -# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS -#================================================= -ynh_script_progression --message="Validating installation parameters..." --weight=1 - -# Stop if architecture is 32-bit ARM -case $YNH_ARCH in - arm|armhf) ynh_die --message="Sorry, your architecture $YNH_ARCH is not supported by $app. Aborting.";; - *) ;; -esac - -final_path=/var/www/$app -test ! -e "$final_path" || ynh_die --message="This path already contains a folder" - -# Register (book) web path -ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url - -#================================================= -# STORE SETTINGS FROM MANIFEST -#================================================= -ynh_script_progression --message="Storing installation settings..." --weight=2 - -ynh_app_setting_set --app=$app --key=domain --value=$domain -ynh_app_setting_set --app=$app --key=path --value=$path_url - -#================================================= -# STANDARD MODIFICATIONS -#================================================= -# FIND AND OPEN A PORT -#================================================= -ynh_script_progression --message="Finding an available port..." --weight=0 - -# Find an available port -port=$(ynh_find_port --port=3000) -ynh_app_setting_set --app=$app --key=port --value=$port - -# Find incoming port peers connect to -peer_port=$(ynh_find_port --port=50007) -# Open this port -ynh_script_progression --message="Configuring firewall..." --weight=1 -ynh_exec_warn_less yunohost firewall allow Both $peer_port -ynh_app_setting_set --app=$app --key=peer_port --value=$peer_port - -#================================================= -# CREATE DEDICATED USER -#================================================= -ynh_script_progression --message="Configuring system user..." --weight=1 - -# Create a system user -ynh_system_user_create --username=$app --home_dir=$final_path - #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= ynh_script_progression --message="Setting up source files..." --weight=4 -ynh_app_setting_set --app=$app --key=final_path --value=$final_path - # Download, check integrity, uncompress and patch the source from app.src -ynh_setup_source --dest_dir=$final_path --source_id=$YNH_ARCH +ynh_setup_source --dest_dir=$install_dir --source_id=$YNH_ARCH -pushd "$final_path" +pushd "$install_dir" gzip --decompress $YNH_ARCH.gz mv $YNH_ARCH $app popd -chmod 750 "$final_path" -chmod -R o-rwx "$final_path" -chown -R $app:www-data "$final_path" -chmod +x $final_path/$app +chown -R $app:www-data "$install_dir" +chmod +x $install_dir/$app #================================================= -# NGINX CONFIGURATION +# SYSTEM CONFIGURATION #================================================= -ynh_script_progression --message="Configuring NGINX web server..." --weight=3 +ynh_script_progression --message="Adding system configurations related to $app ..." --weight=1 # Create a dedicated NGINX config ynh_add_nginx_config +ynh_add_systemd_config + +yunohost service add $app --description="Self-hosted remote torrent client" --needs_exposed_ports="$port_peer" --log="/var/log/$app/$app.log" + #================================================= # CREATE DATA DIRECTORY #================================================= ynh_script_progression --message="Creating a data directory..." --weight=1 -datadir=/home/yunohost.app/$app -ynh_app_setting_set --app=$app --key=datadir --value=$datadir - -mkdir -p $datadir/{torrents,downloads} +mkdir -p $data_dir/{torrents,downloads} # Set permissions to app files -chmod 755 $datadir/{torrents,downloads} -chmod -R o-rwx $datadir -chown -R $app:www-data $datadir +chmod 755 $data_dir/{torrents,downloads} +chmod -R o-rwx $data_dir +chown -R $app:www-data $data_dir #================================================= # MODIFY A CONFIG FILE #================================================= ynh_script_progression --message="Modifying a config file..." --weight=1 -ynh_add_config --template="../conf/config.default.yml" --destination="$final_path/config.yml" +ynh_add_config --template="../conf/config.default.yml" --destination="$install_dir/config.yml" -#================================================= -# SETUP SYSTEMD -#================================================= -ynh_script_progression --message="Configuring a systemd service..." --weight=1 - -ynh_add_systemd_config - -#================================================= -# INTEGRATE SERVICE IN YUNOHOST -#================================================= -ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 - -yunohost service add $app --description="Self-hosted remote torrent client" --needs_exposed_ports="$peer_port" --log="/var/log/$app/$app.log" +chmod 400 "$install_dir/config.yml" +chown $app:$app "$install_dir/config.yml" #================================================= # START SYSTEMD SERVICE @@ -149,24 +67,6 @@ ynh_script_progression --message="Starting a systemd service..." --weight=2 # Start a systemd service ynh_systemd_action --service_name=$app --action=start --log_path=systemd -#================================================= -# SETUP SSOWAT -#================================================= -ynh_script_progression --message="Configuring permissions..." --weight=1 - -# Make app public if necessary or protect it -if [ $is_public -eq 1 ] -then - ynh_permission_update --permission="main" --add="visitors" -fi - -#================================================= -# RELOAD NGINX -#================================================= -ynh_script_progression --message="Reloading NGINX web server..." --weight=2 - -ynh_systemd_action --service_name=nginx --action=reload - #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/remove b/scripts/remove index 8ab2c82..2848d21 100644 --- a/scripts/remove +++ b/scripts/remove @@ -10,23 +10,10 @@ source _common.sh source /usr/share/yunohost/helpers #================================================= -# LOAD SETTINGS +# REMOVE SYSTEMD SERVICE #================================================= -ynh_script_progression --message="Loading installation settings..." --weight=1 -app=$YNH_APP_INSTANCE_NAME - -domain=$(ynh_app_setting_get --app=$app --key=domain) -port=$(ynh_app_setting_get --app=$app --key=port) -final_path=$(ynh_app_setting_get --app=$app --key=final_path) -peer_port=$(ynh_app_setting_get --app=$app --key=peer_port) -datadir=$(ynh_app_setting_get --app=$app --key=datadir) - -#================================================= -# STANDARD REMOVE -#================================================= -# REMOVE SERVICE INTEGRATION IN YUNOHOST -#================================================= +ynh_script_progression --message="Removing system configurations related to $app..." --weight=5 # Remove the service from the list of services known by YunoHost (added from `yunohost service add`) if ynh_exec_warn_less yunohost service status $app >/dev/null @@ -35,61 +22,12 @@ then yunohost service remove $app fi -#================================================= -# STOP AND REMOVE SERVICE -#================================================= -ynh_script_progression --message="Stopping and removing the systemd service..." --weight=1 - # Remove the dedicated systemd config ynh_remove_systemd_config -#================================================= -# REMOVE APP MAIN DIR -#================================================= -ynh_script_progression --message="Removing $app main directory..." --weight=6 - -# Remove the app directory securely -ynh_secure_remove --file="$final_path" - -#================================================= -# REMOVE DATA DIR -#================================================= - -# Remove the data directory if --purge option is used -if [ "${YNH_APP_PURGE:-0}" -eq 1 ] -then - ynh_script_progression --message="Removing app data directory..." --weight=1 - ynh_secure_remove --file="$datadir" -fi - -#================================================= -# REMOVE NGINX CONFIGURATION -#================================================= -ynh_script_progression --message="Removing NGINX web server configuration..." --weight=5 - # Remove the dedicated NGINX config ynh_remove_nginx_config -#================================================= -# CLOSE A PORT -#================================================= - -if yunohost firewall list | grep -q "\- $peer_port$" -then - ynh_script_progression --message="Closing port $peer_port..." --weight=1 - ynh_exec_warn_less yunohost firewall disallow Both $peer_port -fi - -#================================================= -# GENERIC FINALIZATION -#================================================= -# REMOVE DEDICATED USER -#================================================= -ynh_script_progression --message="Removing the dedicated system user..." --weight=1 - -# Delete a system user -ynh_system_user_delete --username=$app - #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/restore b/scripts/restore index 7c8123b..99bd12d 100644 --- a/scripts/restore +++ b/scripts/restore @@ -9,111 +9,48 @@ source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - -#================================================= -# LOAD SETTINGS -#================================================= -ynh_script_progression --message="Loading settings..." --weight=1 - -app=$YNH_APP_INSTANCE_NAME - -domain=$(ynh_app_setting_get --app=$app --key=domain) -path_url=$(ynh_app_setting_get --app=$app --key=path) -final_path=$(ynh_app_setting_get --app=$app --key=final_path) -peer_port=$(ynh_app_setting_get --app=$app --key=peer_port) -datadir=$(ynh_app_setting_get --app=$app --key=datadir) - -#================================================= -# CHECK IF THE APP CAN BE RESTORED -#================================================= -ynh_script_progression --message="Validating restoration parameters..." --weight=2 - -test ! -d $final_path || ynh_die --message="There is already a directory: $final_path " - -#================================================= -# STANDARD RESTORATION STEPS -#================================================= -# RESTORE THE NGINX CONFIGURATION -#================================================= -ynh_script_progression --message="Restoring the NGINX configuration..." --weight=1 - -ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" - -#================================================= -# OPEN PORTS -#================================================= -ynh_script_progression --message="Configuring firewall..." --weight=3 - -ynh_exec_warn_less yunohost firewall allow Both $peer_port - -#================================================= -# RECREATE THE DEDICATED USER -#================================================= -ynh_script_progression --message="Recreating the dedicated system user..." --weight=1 - -# Create the dedicated user (if not existing) -ynh_system_user_create --username=$app --home_dir=$final_path - #================================================= # RESTORE THE APP MAIN DIR #================================================= ynh_script_progression --message="Restoring $app main directory..." --weight=4 -ynh_restore_file --origin_path="$final_path" +ynh_restore_file --origin_path="$install_dir" -chmod 750 "$final_path" -chmod -R o-rwx "$final_path" -chown -R $app:www-data "$final_path" -chmod +x $final_path/$app +chown -R $app:www-data "$install_dir" +chmod +x $install_dir/$app #================================================= # RESTORE DATA #================================================= ynh_script_progression --message="Restoring $app data..." --weight=10 -ynh_restore_file --origin_path="$datadir" --not_mandatory +ynh_restore_file --origin_path="$data_dir" --not_mandatory -mkdir -p $datadir/{torrents,downloads} +mkdir -p $data_dir/{torrents,downloads} -chmod 755 $datadir/{torrents,downloads} -chmod -R o-rwx $datadir -chown -R $app:www-data $datadir +chmod 755 $data_dir/{torrents,downloads} +chmod -R o-rwx $data_dir +chown -R $app:www-data $data_dir #================================================= -# RESTORE SYSTEMD +# RESTORE SYSTEM CONFIGURATIONS #================================================= -ynh_script_progression --message="Restoring the systemd configuration..." --weight=5 +ynh_script_progression --message="Restoring system configurations related to $app..." --weight=1 + +ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" ynh_restore_file --origin_path="/etc/systemd/system/$app.service" systemctl enable $app.service --quiet -#================================================= -# INTEGRATE SERVICE IN YUNOHOST -#================================================= -ynh_script_progression --message="Integrating service in YunoHost..." - -yunohost service add $app --description="Self-hosted remote torrent client" --needs_exposed_ports="$peer_port" --log="/var/log/$app/$app.log" +yunohost service add $app --description="Self-hosted remote torrent client" --needs_exposed_ports="$port_peer" --log="/var/log/$app/$app.log" #================================================= # START SYSTEMD SERVICE #================================================= -ynh_script_progression --message="Starting a systemd service..." --weight=1 +ynh_script_progression --message="Reloading NGINX web server and $app's service..." --weight=1 ynh_systemd_action --service_name=$app --action=start --log_path=systemd -#================================================= -# GENERIC FINALIZATION -#================================================= -# RELOAD NGINX -#================================================= -ynh_script_progression --message="Reloading NGINX web server..." --weight=1 - ynh_systemd_action --service_name=nginx --action=reload #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index d93dfba..47ee748 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -9,56 +9,12 @@ source _common.sh source /usr/share/yunohost/helpers -#================================================= -# LOAD SETTINGS -#================================================= -ynh_script_progression --message="Loading installation settings..." --weight=2 - -app=$YNH_APP_INSTANCE_NAME - -domain=$(ynh_app_setting_get --app=$app --key=domain) -path_url=$(ynh_app_setting_get --app=$app --key=path) -final_path=$(ynh_app_setting_get --app=$app --key=final_path) -port=$(ynh_app_setting_get --app=$app --key=port) -peer_port=$(ynh_app_setting_get --app=$app --key=peer_port) - #================================================= # CHECK VERSION #================================================= upgrade_type=$(ynh_check_app_version_changed) -#================================================= -# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP -#================================================= -ynh_script_progression --message="Backing up $app before upgrading (may take a while)..." --weight=4 - -# Backup the current version of the app -ynh_backup_before_upgrade -ynh_clean_setup () { - # restore it if the upgrade fails - ynh_restore_upgradebackup -} -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - -#================================================= -# ENSURE DOWNWARD COMPATIBILITY -#================================================= -ynh_script_progression --message="Ensuring downward compatibility..." --weight=1 - -case $YNH_ARCH in - arm|armhf) ynh_die --message="Sorry, your architecture $YNH_ARCH is not supported by $app. Aborting.";; - *) ;; -esac - -# Cleaning legacy permissions -if ynh_legacy_permissions_exists; then - ynh_legacy_permissions_delete_all - - ynh_app_setting_delete --app=$app --key=is_public -fi - #================================================= # STANDARD UPGRADE STEPS #================================================= @@ -68,14 +24,6 @@ ynh_script_progression --message="Stopping a systemd service..." --weight=1 ynh_systemd_action --service_name=$app --action=stop --log_path=systemd -#================================================= -# CREATE DEDICATED USER -#================================================= -ynh_script_progression --message="Making sure dedicated system user exists..." --weight=1 - -# Create a dedicated user (if not existing) -ynh_system_user_create --username=$app --home_dir="$final_path" - #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= @@ -85,33 +33,35 @@ then ynh_script_progression --message="Upgrading source files..." --weight=5 # Download, check integrity, uncompress and patch the source from app.src - ynh_setup_source --dest_dir=$final_path --source_id=$YNH_ARCH --keep="config.yml" + ynh_setup_source --dest_dir=$install_dir --source_id=$YNH_ARCH --keep="config.yml" - pushd "$final_path" + pushd "$install_dir" gzip --decompress $YNH_ARCH.gz mv $YNH_ARCH $app popd fi -chmod 750 "$final_path" -chmod -R o-rwx "$final_path" -chown -R $app:www-data "$final_path" -chmod +x $final_path/$app +chown -R $app:www-data "$install_dir" +chmod +x $install_dir/$app #================================================= -# NGINX CONFIGURATION +# REAPPLY SYSTEM CONFIGURATIONS #================================================= -ynh_script_progression --message="Upgrading NGINX web server configuration..." --weight=2 +ynh_script_progression --message="Upgrading system configurations related to $app..." --weight=1 # Create a dedicated NGINX config ynh_add_nginx_config +ynh_add_systemd_config + +yunohost service add $app --description="Self-hosted remote torrent client" --needs_exposed_ports="$port_peer" --log="/var/log/$app/$app.log" + #================================================= # MODIFY A CONFIG FILE #================================================= # ynh_script_progression --message="Modifying a config file..." --weight=1 -# ynh_add_config --template="../conf/config.default.yml" --destination="$final_path/config.yml" +# ynh_add_config --template="../conf/config.default.yml" --destination="$install_dir/config.yml" #================================================= # CREATE DIRECTORIES @@ -122,20 +72,6 @@ mkdir -p /home/yunohost.app/$app/{torrents,downloads} chown -R $app:www-data /home/yunohost.app/$app chmod 755 /home/yunohost.app/$app/{torrents,downloads} -#================================================= -# SETUP SYSTEMD -#================================================= -ynh_script_progression --message="Configuring a systemd service..." --weight=2 - -ynh_add_systemd_config - -#================================================= -# INTEGRATE SERVICE IN YUNOHOST -#================================================= -ynh_script_progression --message="Integrating service in YunoHost..." - -yunohost service add $app --description="Self-hosted remote torrent client" --needs_exposed_ports="$peer_port" --log="/var/log/$app/$app.log" - #================================================= # START SYSTEMD SERVICE #================================================= @@ -143,13 +79,6 @@ ynh_script_progression --message="Starting a systemd service..." --weight=1 ynh_systemd_action --service_name=$app --action=start --log_path=systemd -#================================================= -# RELOAD NGINX -#================================================= -ynh_script_progression --message="Reloading NGINX web server..." --weight=1 - -ynh_systemd_action --service_name=nginx --action=reload - #================================================= # END OF SCRIPT #================================================= diff --git a/tests.toml b/tests.toml new file mode 100644 index 0000000..02e740e --- /dev/null +++ b/tests.toml @@ -0,0 +1,10 @@ +test_format = 1.0 + +[default] + + # ------------------------------- + # Commits to test upgrade from + # ------------------------------- + + test_upgrade_from.bbce7cfa.name = "Upgrade from 1.3.7" + \ No newline at end of file From 7c02d07b0b0763a1713b3a6919240dd5d9de1cd7 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Sat, 18 Feb 2023 14:30:14 +0000 Subject: [PATCH 40/68] Auto-update README --- README.md | 2 -- README_fr.md | 2 -- 2 files changed, 4 deletions(-) diff --git a/README.md b/README.md index 0e9abc0..fa03bf4 100644 --- a/README.md +++ b/README.md @@ -35,12 +35,10 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). ## Screenshots -![Screenshot of Simple Torrent](./doc/screenshots/.DS_Store) ![Screenshot of Simple Torrent](./doc/screenshots/screenshot.png) ## Documentation and resources -* Official app website: * Official admin documentation: * Upstream app code repository: * YunoHost documentation for this app: diff --git a/README_fr.md b/README_fr.md index 9b814ba..9373a64 100644 --- a/README_fr.md +++ b/README_fr.md @@ -35,12 +35,10 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). ## Captures d’écran -![Capture d’écran de Simple Torrent](./doc/screenshots/.DS_Store) ![Capture d’écran de Simple Torrent](./doc/screenshots/screenshot.png) ## Documentations et ressources -* Site officiel de l’app : * Documentation officielle de l’admin : * Dépôt de code officiel de l’app : * Documentation YunoHost pour cette app : From 87ce4467ef23859b12361fd4c2f252d310ca1ba8 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Sat, 18 Feb 2023 14:31:59 +0000 Subject: [PATCH 41/68] Auto-update README --- README.md | 2 +- README_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c0d2167..fa03bf4 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Shipped version:** 1.3.9~ynh5 +**Shipped version:** 1.3.9~ynh4 ## Screenshots diff --git a/README_fr.md b/README_fr.md index 6d177dc..9373a64 100644 --- a/README_fr.md +++ b/README_fr.md @@ -31,7 +31,7 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Version incluse :** 1.3.9~ynh5 +**Version incluse :** 1.3.9~ynh4 ## Captures d’écran From 6e305ff9aa96f92004cefa2375995df7c7e7c8eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sat, 18 Feb 2023 18:18:02 +0100 Subject: [PATCH 42/68] fix --- scripts/install | 2 ++ scripts/restore | 2 ++ scripts/upgrade | 2 ++ 3 files changed, 6 insertions(+) diff --git a/scripts/install b/scripts/install index d443955..1a1a84f 100644 --- a/scripts/install +++ b/scripts/install @@ -22,6 +22,8 @@ pushd "$install_dir" mv $YNH_ARCH $app popd +chmod 750 "$install_dir" +chmod -R o-rwx "$install_dir" chown -R $app:www-data "$install_dir" chmod +x $install_dir/$app diff --git a/scripts/restore b/scripts/restore index 99bd12d..dc064f5 100644 --- a/scripts/restore +++ b/scripts/restore @@ -16,6 +16,8 @@ ynh_script_progression --message="Restoring $app main directory..." --weight=4 ynh_restore_file --origin_path="$install_dir" +chmod 750 "$install_dir" +chmod -R o-rwx "$install_dir" chown -R $app:www-data "$install_dir" chmod +x $install_dir/$app diff --git a/scripts/upgrade b/scripts/upgrade index 47ee748..4625c46 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -41,6 +41,8 @@ then popd fi +chmod 750 "$install_dir" +chmod -R o-rwx "$install_dir" chown -R $app:www-data "$install_dir" chmod +x $install_dir/$app From 3a55d0774662a2ec1738a5abf43873c7dc59a2f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sat, 18 Feb 2023 18:19:09 +0100 Subject: [PATCH 43/68] Update manifest.toml --- manifest.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.toml b/manifest.toml index 790157d..a1b95d8 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ name = "Simple Torrent" description.en = "Self-hosted remote torrent client" description.fr = "Client torrent distant auto-hébergé" -version = "1.3.9~ynh4" +version = "1.3.9~ynh6" maintainers = ["eric_G"] From 4f1e218844c4fe4ddfb26f6cca9a7420e50a0db1 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Sat, 18 Feb 2023 17:19:13 +0000 Subject: [PATCH 44/68] Auto-update README --- README.md | 2 +- README_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fa03bf4..4ea3679 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Shipped version:** 1.3.9~ynh4 +**Shipped version:** 1.3.9~ynh6 ## Screenshots diff --git a/README_fr.md b/README_fr.md index 9373a64..8b7509f 100644 --- a/README_fr.md +++ b/README_fr.md @@ -31,7 +31,7 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Version incluse :** 1.3.9~ynh4 +**Version incluse :** 1.3.9~ynh6 ## Captures d’écran From 1d2b7674fc5b580eba6ee1887ff526c8d3ec39d7 Mon Sep 17 00:00:00 2001 From: YunoHost Bot Date: Fri, 24 Feb 2023 00:38:33 +0100 Subject: [PATCH 45/68] Upgrade auto-updater (#78) * [autopatch] Upgrade auto-updater * Auto-update README * [autopatch] Upgrade auto-updater --------- Co-authored-by: tituspijean --- .github/workflows/updater.yml | 4 ++-- README.md | 4 ++++ README_fr.md | 4 ++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/updater.yml b/.github/workflows/updater.yml index ca77fed..ac12a56 100644 --- a/.github/workflows/updater.yml +++ b/.github/workflows/updater.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Fetch the source code - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: token: ${{ secrets.GITHUB_TOKEN }} - name: Run the updater script @@ -33,7 +33,7 @@ jobs: - name: Create Pull Request id: cpr if: ${{ env.PROCEED == 'true' }} - uses: peter-evans/create-pull-request@v3 + uses: peter-evans/create-pull-request@v4 with: token: ${{ secrets.GITHUB_TOKEN }} commit-message: Update to version ${{ env.VERSION }} diff --git a/README.md b/README.md index 4ea3679..f8f25b7 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,10 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). ![Screenshot of Simple Torrent](./doc/screenshots/screenshot.png) +## :red_circle: Antifeatures + +- **Upstream not maintained**: This software is not maintained anymore. Expect it to break down over time, be exposed to unfixed security breaches, etc. + ## Documentation and resources * Official admin documentation: diff --git a/README_fr.md b/README_fr.md index 8b7509f..bd8b408 100644 --- a/README_fr.md +++ b/README_fr.md @@ -37,6 +37,10 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). ![Capture d’écran de Simple Torrent](./doc/screenshots/screenshot.png) +## :red_circle: Fonctions indésirables + +- **Upstream not maintained**: This software is not maintained anymore. Expect it to break down over time, be exposed to unfixed security breaches, etc. + ## Documentations et ressources * Documentation officielle de l’admin : From e8c06575e73128c546f0c6d95024f0eb26a39fe0 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Tue, 14 Mar 2023 07:06:21 +0000 Subject: [PATCH 46/68] Auto-update README --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 5cf0565..f8f25b7 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,6 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - **Upstream not maintained**: This software is not maintained anymore. Expect it to break down over time, be exposed to unfixed security breaches, etc. - ## Documentation and resources * Official admin documentation: From 423fa23647d2b6c216bf1f5409e45d6983b2094e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Tue, 14 Mar 2023 08:10:55 +0100 Subject: [PATCH 47/68] Update manifest.toml --- manifest.toml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/manifest.toml b/manifest.toml index 0019d85..5250e24 100644 --- a/manifest.toml +++ b/manifest.toml @@ -39,6 +39,18 @@ ram.runtime = "50M" default = "visitors" [resources] + + [resources.sources] + [resources.sources.main] + amd64.url = "https://github.com/boypt/simple-torrent/releases/download/1.3.9/cloud-torrent_linux_amd64_static.gz" + amd64.sha256 = "d2f535e4cd0449b357a563cfce79c1f6afcac9b7b3af94e758defc44faa52ebf" + arm64.url = "https://github.com/boypt/simple-torrent/releases/download/1.3.9/cloud-torrent_linux_arm64_static.gz" + arm64.sha256 = "6f48f8b59bc8d834c6ede1d27ecc1a598b8a0be1dab00622caa6fd047e51eed6" + i386.url = "https://github.com/boypt/simple-torrent/releases/download/1.3.9/cloud-torrent_linux_386_static.gz" + i386.sha256 = "583898eb907c21dbbcb6f33934eae3dc1d6ec2620fdc7689c70a3479049af52b" + extract = false + in_subdir = false + [resources.system_user] [resources.install_dir] From edcb8252e9221841329651f7593600b28e93a1b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Tue, 14 Mar 2023 08:12:57 +0100 Subject: [PATCH 48/68] fix --- conf/amd64.src | 6 ---- conf/arm64.src | 6 ---- conf/i386.src | 6 ---- scripts/change_url | 74 +--------------------------------------------- scripts/install | 3 +- scripts/upgrade | 3 +- 6 files changed, 3 insertions(+), 95 deletions(-) delete mode 100644 conf/amd64.src delete mode 100644 conf/arm64.src delete mode 100644 conf/i386.src diff --git a/conf/amd64.src b/conf/amd64.src deleted file mode 100644 index 6489df8..0000000 --- a/conf/amd64.src +++ /dev/null @@ -1,6 +0,0 @@ -SOURCE_URL=https://github.com/boypt/simple-torrent/releases/download/1.3.9/cloud-torrent_linux_amd64_static.gz -SOURCE_SUM=d2f535e4cd0449b357a563cfce79c1f6afcac9b7b3af94e758defc44faa52ebf -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=gz -SOURCE_IN_SUBDIR=false -SOURCE_EXTRACT=false diff --git a/conf/arm64.src b/conf/arm64.src deleted file mode 100644 index 6c4b48d..0000000 --- a/conf/arm64.src +++ /dev/null @@ -1,6 +0,0 @@ -SOURCE_URL=https://github.com/boypt/simple-torrent/releases/download/1.3.9/cloud-torrent_linux_arm64_static.gz -SOURCE_SUM=6f48f8b59bc8d834c6ede1d27ecc1a598b8a0be1dab00622caa6fd047e51eed6 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=gz -SOURCE_IN_SUBDIR=false -SOURCE_EXTRACT=false diff --git a/conf/i386.src b/conf/i386.src deleted file mode 100644 index dd17e3a..0000000 --- a/conf/i386.src +++ /dev/null @@ -1,6 +0,0 @@ -SOURCE_URL=https://github.com/boypt/simple-torrent/releases/download/1.3.9/cloud-torrent_linux_386_static.gz -SOURCE_SUM=583898eb907c21dbbcb6f33934eae3dc1d6ec2620fdc7689c70a3479049af52b -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=gz -SOURCE_IN_SUBDIR=false -SOURCE_EXTRACT=false diff --git a/scripts/change_url b/scripts/change_url index 6477fa0..76d5031 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -9,49 +9,6 @@ source _common.sh source /usr/share/yunohost/helpers -#================================================= -# RETRIEVE ARGUMENTS -#================================================= - -old_domain=$YNH_APP_OLD_DOMAIN -old_path=$YNH_APP_OLD_PATH - -new_domain=$YNH_APP_NEW_DOMAIN -new_path=$YNH_APP_NEW_PATH - -#================================================= -# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP -#================================================= -ynh_script_progression --message="Backing up $app before changing its URL (may take a while)..." --weight=1 - -# Backup the current version of the app -ynh_backup_before_upgrade -ynh_clean_setup () { - # Remove the new domain config file, the remove script won't do it as it doesn't know yet its location. - ynh_secure_remove --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" - - # restore it if the upgrade fails - ynh_restore_upgradebackup -} -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - -#================================================= -# CHECK WHICH PARTS SHOULD BE CHANGED -#================================================= - -change_domain=0 -if [ "$old_domain" != "$new_domain" ] -then - change_domain=1 -fi - -change_path=0 -if [ "$old_path" != "$new_path" ] -then - change_path=1 -fi - #================================================= # STANDARD MODIFICATIONS #================================================= @@ -66,29 +23,7 @@ ynh_systemd_action --service_name=$app --action=stop --log_path="/var/log/$app/$ #================================================= ynh_script_progression --message="Updating NGINX web server configuration..." --weight=1 -nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf - -# Change the path in the NGINX config file -if [ $change_path -eq 1 ] -then - # Make a backup of the original NGINX config file if modified - ynh_backup_if_checksum_is_different --file="$nginx_conf_path" - # Set global variables for NGINX helper - domain="$old_domain" - path_url="$new_path" - # Create a dedicated NGINX config - ynh_add_nginx_config -fi - -# Change the domain for NGINX -if [ $change_domain -eq 1 ] -then - # Delete file checksum for the old conf file location - ynh_delete_file_checksum --file="$nginx_conf_path" - mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf - # Store file checksum for the new config file location - ynh_store_file_checksum --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" -fi +ynh_change_url_nginx_config #================================================= # GENERIC FINALISATION @@ -100,13 +35,6 @@ ynh_script_progression --message="Starting a systemd service..." --weight=1 # Start a systemd service ynh_systemd_action --service_name=$app --action=start --log_path=systemd -#================================================= -# RELOAD NGINX -#================================================= -ynh_script_progression --message="Reloading NGINX web server..." --weight=1 - -ynh_systemd_action --service_name=nginx --action=reload - #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/install b/scripts/install index 1a1a84f..b83738d 100644 --- a/scripts/install +++ b/scripts/install @@ -15,14 +15,13 @@ source /usr/share/yunohost/helpers ynh_script_progression --message="Setting up source files..." --weight=4 # Download, check integrity, uncompress and patch the source from app.src -ynh_setup_source --dest_dir=$install_dir --source_id=$YNH_ARCH +ynh_setup_source --dest_dir=$install_dir pushd "$install_dir" gzip --decompress $YNH_ARCH.gz mv $YNH_ARCH $app popd -chmod 750 "$install_dir" chmod -R o-rwx "$install_dir" chown -R $app:www-data "$install_dir" chmod +x $install_dir/$app diff --git a/scripts/upgrade b/scripts/upgrade index 4625c46..1ae66b0 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -33,7 +33,7 @@ then ynh_script_progression --message="Upgrading source files..." --weight=5 # Download, check integrity, uncompress and patch the source from app.src - ynh_setup_source --dest_dir=$install_dir --source_id=$YNH_ARCH --keep="config.yml" + ynh_setup_source --dest_dir=$install_dir --keep="config.yml" pushd "$install_dir" gzip --decompress $YNH_ARCH.gz @@ -41,7 +41,6 @@ then popd fi -chmod 750 "$install_dir" chmod -R o-rwx "$install_dir" chown -R $app:www-data "$install_dir" chmod +x $install_dir/$app From 0a0c1df0cef83dbb5034b128bd049b7db2124be7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Tue, 14 Mar 2023 21:02:05 +0100 Subject: [PATCH 49/68] Update scripts/install Co-authored-by: Alexandre Aubin --- scripts/install | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/install b/scripts/install index b83738d..a6859dd 100644 --- a/scripts/install +++ b/scripts/install @@ -18,8 +18,8 @@ ynh_script_progression --message="Setting up source files..." --weight=4 ynh_setup_source --dest_dir=$install_dir pushd "$install_dir" - gzip --decompress $YNH_ARCH.gz - mv $YNH_ARCH $app + gzip --decompress main.gz + mv main $app popd chmod -R o-rwx "$install_dir" From a980fb5a76b941cc88abe90a0f118883752bcca7 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Tue, 14 Mar 2023 21:21:54 +0100 Subject: [PATCH 50/68] Update scripts/install --- scripts/install | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/install b/scripts/install index a6859dd..3107450 100644 --- a/scripts/install +++ b/scripts/install @@ -18,8 +18,8 @@ ynh_script_progression --message="Setting up source files..." --weight=4 ynh_setup_source --dest_dir=$install_dir pushd "$install_dir" - gzip --decompress main.gz - mv main $app + gzip --decompress main --to-stdout > main_dezipped + mv main_dezipped $app popd chmod -R o-rwx "$install_dir" From d41fdd8b735dc86663a3a53331486806a5933fab Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Tue, 14 Mar 2023 22:08:17 +0100 Subject: [PATCH 51/68] Fix upgrade setup_source, same as install --- scripts/upgrade | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index 1ae66b0..fbd58c9 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -36,9 +36,9 @@ then ynh_setup_source --dest_dir=$install_dir --keep="config.yml" pushd "$install_dir" - gzip --decompress $YNH_ARCH.gz - mv $YNH_ARCH $app - popd + gzip --decompress main --to-stdout > main_dezipped + mv main_dezipped $app + popd fi chmod -R o-rwx "$install_dir" From d1b446d227506a323dcf8425a3c3efa2b96fb082 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Tue, 14 Mar 2023 22:59:09 +0100 Subject: [PATCH 52/68] Update manifest.toml --- manifest.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.toml b/manifest.toml index 5250e24..d82d5c3 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ name = "Simple Torrent" description.en = "Self-hosted remote torrent client" description.fr = "Client torrent distant auto-hébergé" -version = "1.3.9~ynh6" +version = "1.3.9~ynh7" maintainers = ["eric_G"] From f22853e30a0e48ca1de23f7f4ec27c73ee443214 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Tue, 14 Mar 2023 21:59:15 +0000 Subject: [PATCH 53/68] Auto-update README --- README.md | 2 +- README_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f8f25b7..7e48259 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Shipped version:** 1.3.9~ynh6 +**Shipped version:** 1.3.9~ynh7 ## Screenshots diff --git a/README_fr.md b/README_fr.md index bd8b408..d896122 100644 --- a/README_fr.md +++ b/README_fr.md @@ -31,7 +31,7 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Version incluse :** 1.3.9~ynh6 +**Version incluse :** 1.3.9~ynh7 ## Captures d’écran From 417938d08151f9f09130f4663db486d47ceac136 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Tue, 21 Mar 2023 08:15:45 +0100 Subject: [PATCH 54/68] Update tests.toml --- tests.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests.toml b/tests.toml index 02e740e..6cfce03 100644 --- a/tests.toml +++ b/tests.toml @@ -6,5 +6,5 @@ test_format = 1.0 # Commits to test upgrade from # ------------------------------- - test_upgrade_from.bbce7cfa.name = "Upgrade from 1.3.7" + #test_upgrade_from.bbce7cfa.name = "Upgrade from 1.3.7" \ No newline at end of file From ca8b8451c942b88fd4267b1de7710ec0a0f4c223 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Tue, 21 Mar 2023 08:15:53 +0100 Subject: [PATCH 55/68] Update manifest.toml --- manifest.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.toml b/manifest.toml index d82d5c3..018783e 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ name = "Simple Torrent" description.en = "Self-hosted remote torrent client" description.fr = "Client torrent distant auto-hébergé" -version = "1.3.9~ynh7" +version = "1.3.9~ynh8" maintainers = ["eric_G"] From 1fc336c2027f6a415cd8a1787ff09ac41ed0420b Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Tue, 21 Mar 2023 07:15:59 +0000 Subject: [PATCH 56/68] Auto-update README --- README.md | 2 +- README_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7e48259..5e208cb 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Shipped version:** 1.3.9~ynh7 +**Shipped version:** 1.3.9~ynh8 ## Screenshots diff --git a/README_fr.md b/README_fr.md index d896122..96849e9 100644 --- a/README_fr.md +++ b/README_fr.md @@ -31,7 +31,7 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Version incluse :** 1.3.9~ynh7 +**Version incluse :** 1.3.9~ynh8 ## Captures d’écran From 90aa9efed0593f95389a1a31813823ea694d3c32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sun, 2 Apr 2023 22:57:26 +0200 Subject: [PATCH 57/68] data dir --- manifest.toml | 15 ++++++++------- scripts/install | 12 ------------ scripts/upgrade | 11 +---------- 3 files changed, 9 insertions(+), 29 deletions(-) diff --git a/manifest.toml b/manifest.toml index 018783e..225e3ec 100644 --- a/manifest.toml +++ b/manifest.toml @@ -41,13 +41,13 @@ ram.runtime = "50M" [resources] [resources.sources] - [resources.sources.main] - amd64.url = "https://github.com/boypt/simple-torrent/releases/download/1.3.9/cloud-torrent_linux_amd64_static.gz" - amd64.sha256 = "d2f535e4cd0449b357a563cfce79c1f6afcac9b7b3af94e758defc44faa52ebf" - arm64.url = "https://github.com/boypt/simple-torrent/releases/download/1.3.9/cloud-torrent_linux_arm64_static.gz" - arm64.sha256 = "6f48f8b59bc8d834c6ede1d27ecc1a598b8a0be1dab00622caa6fd047e51eed6" - i386.url = "https://github.com/boypt/simple-torrent/releases/download/1.3.9/cloud-torrent_linux_386_static.gz" - i386.sha256 = "583898eb907c21dbbcb6f33934eae3dc1d6ec2620fdc7689c70a3479049af52b" + [resources.sources.main] + amd64.url = "https://github.com/boypt/simple-torrent/releases/download/1.3.9/cloud-torrent_linux_amd64_static.gz" + amd64.sha256 = "d2f535e4cd0449b357a563cfce79c1f6afcac9b7b3af94e758defc44faa52ebf" + arm64.url = "https://github.com/boypt/simple-torrent/releases/download/1.3.9/cloud-torrent_linux_arm64_static.gz" + arm64.sha256 = "6f48f8b59bc8d834c6ede1d27ecc1a598b8a0be1dab00622caa6fd047e51eed6" + i386.url = "https://github.com/boypt/simple-torrent/releases/download/1.3.9/cloud-torrent_linux_386_static.gz" + i386.sha256 = "583898eb907c21dbbcb6f33934eae3dc1d6ec2620fdc7689c70a3479049af52b" extract = false in_subdir = false @@ -56,6 +56,7 @@ ram.runtime = "50M" [resources.install_dir] [resources.data_dir] + subdirs = ["torrents", "downloads"] [resources.ports] main.default = 3000 diff --git a/scripts/install b/scripts/install index 3107450..e171818 100644 --- a/scripts/install +++ b/scripts/install @@ -38,18 +38,6 @@ ynh_add_systemd_config yunohost service add $app --description="Self-hosted remote torrent client" --needs_exposed_ports="$port_peer" --log="/var/log/$app/$app.log" -#================================================= -# CREATE DATA DIRECTORY -#================================================= -ynh_script_progression --message="Creating a data directory..." --weight=1 - -mkdir -p $data_dir/{torrents,downloads} - -# Set permissions to app files -chmod 755 $data_dir/{torrents,downloads} -chmod -R o-rwx $data_dir -chown -R $app:www-data $data_dir - #================================================= # MODIFY A CONFIG FILE #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index fbd58c9..5b57423 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -38,7 +38,7 @@ then pushd "$install_dir" gzip --decompress main --to-stdout > main_dezipped mv main_dezipped $app - popd + popd fi chmod -R o-rwx "$install_dir" @@ -64,15 +64,6 @@ yunohost service add $app --description="Self-hosted remote torrent client" --ne # ynh_add_config --template="../conf/config.default.yml" --destination="$install_dir/config.yml" -#================================================= -# CREATE DIRECTORIES -#================================================= - -mkdir -p /home/yunohost.app/$app/{torrents,downloads} - -chown -R $app:www-data /home/yunohost.app/$app -chmod 755 /home/yunohost.app/$app/{torrents,downloads} - #================================================= # START SYSTEMD SERVICE #================================================= From b11912265c4a2e495e901ffd9c0c0f77e6b7a6e6 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Wed, 19 Jun 2024 09:24:51 +0000 Subject: [PATCH 58/68] Auto-update READMEs --- ALL_README.md | 8 ++++++ README.md | 22 ++++++++--------- README_es.md | 63 +++++++++++++++++++++++++++++++++++++++++++++++ README_eu.md | 63 +++++++++++++++++++++++++++++++++++++++++++++++ README_fr.md | 32 ++++++++++++------------ README_gl.md | 63 +++++++++++++++++++++++++++++++++++++++++++++++ README_zh_Hans.md | 63 +++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 287 insertions(+), 27 deletions(-) create mode 100644 ALL_README.md create mode 100644 README_es.md create mode 100644 README_eu.md create mode 100644 README_gl.md create mode 100644 README_zh_Hans.md diff --git a/ALL_README.md b/ALL_README.md new file mode 100644 index 0000000..152f2e7 --- /dev/null +++ b/ALL_README.md @@ -0,0 +1,8 @@ +# All available README files by language + +- [Read the README in English](README.md) +- [Lea el README en español](README_es.md) +- [Irakurri README euskaraz](README_eu.md) +- [Lire le README en français](README_fr.md) +- [Le o README en galego](README_gl.md) +- [阅读中文(简体)的 README](README_zh_Hans.md) diff --git a/README.md b/README.md index 363fe3a..da5d466 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ @@ -9,10 +9,10 @@ It shall NOT be edited by hand. [![Install Simple Torrent with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=simple-torrent) -*[Lire ce readme en français.](./README_fr.md)* +*[Read this README in other languages.](./ALL_README.md)* -> *This package allows you to install Simple Torrent quickly and simply on a YunoHost server. -If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/install) to learn how to install it.* +> *This package allows you to install Simple Torrent quickly and simply on a YunoHost server.* +> *If you don't have YunoHost, please consult [the guide](https://yunohost.org/install) to learn how to install it.* ## Overview @@ -43,18 +43,18 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). ## Documentation and resources -* Official admin documentation: -* Upstream app code repository: -* YunoHost Store: -* Report a bug: +- Official admin documentation: +- Upstream app code repository: +- YunoHost Store: +- Report a bug: ## Developer info -Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing). +Please send your pull request to the [`testing` branch](https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing). -To try the testing branch, please proceed like that. +To try the `testing` branch, please proceed like that: -``` bash +```bash sudo yunohost app install https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug or sudo yunohost app upgrade simple-torrent -u https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug diff --git a/README_es.md b/README_es.md new file mode 100644 index 0000000..61a2dd0 --- /dev/null +++ b/README_es.md @@ -0,0 +1,63 @@ + + +# Simple Torrent para Yunohost + +[![Nivel de integración](https://dash.yunohost.org/integration/simple-torrent.svg)](https://dash.yunohost.org/appci/app/simple-torrent) ![Estado funcional](https://ci-apps.yunohost.org/ci/badges/simple-torrent.status.svg) ![Estado En Mantención](https://ci-apps.yunohost.org/ci/badges/simple-torrent.maintain.svg) + +[![Instalar Simple Torrent con Yunhost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=simple-torrent) + +*[Leer este README en otros idiomas.](./ALL_README.md)* + +> *Este paquete le permite instalarSimple Torrent rapidamente y simplement en un servidor YunoHost.* +> *Si no tiene YunoHost, visita [the guide](https://yunohost.org/install) para aprender como instalarla.* + +## Descripción general + +SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. + +### Features + +- Individual file download control (1.1.3+) +- Run external program on tasks completion +- Stops task when seeding ratio reached +- Download/Upload speed limiter +- Detailed transfer stats in web UI. +- Torrent Watcher +- Extra trackers from external source +- Protocol Handler to magnet +- Magnet RSS subscribing supported + + +**Versión actual:** 1.3.9~ynh8 + +## Capturas + +![Captura de Simple Torrent](./doc/screenshots/screenshot.png) + +## :red_circle: funcionalidades no deseadas + +- **Upstream not maintained**: This software is not maintained anymore. Expect it to break down over time, be exposed to unfixed security breaches, etc. + +## Documentaciones y recursos + +- Documentación administrador oficial: +- Repositorio del código fuente oficial de la aplicación : +- Catálogo YunoHost: +- Reportar un error: + +## Información para desarrolladores + +Por favor enviar sus correcciones a la [`branch testing`](https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing + +Para probar la rama `testing`, sigue asÍ: + +```bash +sudo yunohost app install https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug +o +sudo yunohost app upgrade simple-torrent -u https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug +``` + +**Mas informaciones sobre el empaquetado de aplicaciones:** diff --git a/README_eu.md b/README_eu.md new file mode 100644 index 0000000..042abdb --- /dev/null +++ b/README_eu.md @@ -0,0 +1,63 @@ + + +# Simple Torrent YunoHost-erako + +[![Integrazio maila](https://dash.yunohost.org/integration/simple-torrent.svg)](https://dash.yunohost.org/appci/app/simple-torrent) ![Funtzionamendu egoera](https://ci-apps.yunohost.org/ci/badges/simple-torrent.status.svg) ![Mantentze egoera](https://ci-apps.yunohost.org/ci/badges/simple-torrent.maintain.svg) + +[![Instalatu Simple Torrent YunoHost-ekin](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=simple-torrent) + +*[Irakurri README hau beste hizkuntzatan.](./ALL_README.md)* + +> *Pakete honek Simple Torrent YunoHost zerbitzari batean azkar eta zailtasunik gabe instalatzea ahalbidetzen dizu.* +> *YunoHost ez baduzu, kontsultatu [gida](https://yunohost.org/install) nola instalatu ikasteko.* + +## Aurreikuspena + +SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. + +### Features + +- Individual file download control (1.1.3+) +- Run external program on tasks completion +- Stops task when seeding ratio reached +- Download/Upload speed limiter +- Detailed transfer stats in web UI. +- Torrent Watcher +- Extra trackers from external source +- Protocol Handler to magnet +- Magnet RSS subscribing supported + + +**Paketatutako bertsioa:** 1.3.9~ynh8 + +## Pantaila-argazkiak + +![Simple Torrent(r)en pantaila-argazkia](./doc/screenshots/screenshot.png) + +## :red_circle: Ezaugarri zalantzagarriak + +- **Jatorrizko garapena utzita**: Software honek ez du arduradunik. Denborak aurrera egin ahala funtzionatzeari utziko dio, konpondu gabeko segurtasun arazoak izango ditu, etab. + +## Dokumentazioa eta baliabideak + +- Administratzaileen dokumentazio ofiziala: +- Jatorrizko aplikazioaren kode-gordailua: +- YunoHost Denda: +- Eman errore baten berri: + +## Garatzaileentzako informazioa + +Bidali `pull request`a [`testing` abarrera](https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing). + +`testing` abarra probatzeko, ondorengoa egin: + +```bash +sudo yunohost app install https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug +edo +sudo yunohost app upgrade simple-torrent -u https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug +``` + +**Informazio gehiago aplikazioaren paketatzeari buruz:** diff --git a/README_fr.md b/README_fr.md index 57e7574..7dde426 100644 --- a/README_fr.md +++ b/README_fr.md @@ -1,6 +1,6 @@ # Simple Torrent pour YunoHost @@ -9,10 +9,10 @@ It shall NOT be edited by hand. [![Installer Simple Torrent avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=simple-torrent) -*[Read this readme in english.](./README.md)* +*[Lire le README dans d'autres langues.](./ALL_README.md)* -> *Ce package vous permet d’installer Simple Torrent rapidement et simplement sur un serveur YunoHost. -Si vous n’avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l’installer et en profiter.* +> *Ce package vous permet d’installer Simple Torrent rapidement et simplement sur un serveur YunoHost.* +> *Si vous n’avez pas YunoHost, consultez [ce guide](https://yunohost.org/install) pour savoir comment l’installer et en profiter.* ## Vue d’ensemble @@ -31,33 +31,33 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Version incluse :** 1.3.9~ynh8 +**Version incluse :** 1.3.9~ynh8 ## Captures d’écran ![Capture d’écran de Simple Torrent](./doc/screenshots/screenshot.png) -## :red_circle: Fonctions indésirables +## :red_circle: Anti-fonctionnalités -- **Upstream not maintained**: This software is not maintained anymore. Expect it to break down over time, be exposed to unfixed security breaches, etc. +- **Application non maintenue **: Ce logiciel n'est plus maintenu. Attendez-vous à ce qu'il ne fonctionne plus avec le temps, et que l'on découvre des failles de sécurité qui ne seront pas corrigées, etc. ## Documentations et ressources -* Documentation officielle de l’admin : -* Dépôt de code officiel de l’app : -* YunoHost Store: -* Signaler un bug : +- Documentation officielle de l’admin : +- Dépôt de code officiel de l’app : +- YunoHost Store : +- Signaler un bug : ## Informations pour les développeurs -Merci de faire vos pull request sur la [branche testing](https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing). +Merci de faire vos pull request sur la [branche `testing`](https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing). -Pour essayer la branche testing, procédez comme suit. +Pour essayer la branche `testing`, procédez comme suit : -``` bash +```bash sudo yunohost app install https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug ou sudo yunohost app upgrade simple-torrent -u https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug ``` -**Plus d’infos sur le packaging d’applications :** \ No newline at end of file +**Plus d’infos sur le packaging d’applications :** diff --git a/README_gl.md b/README_gl.md new file mode 100644 index 0000000..00010e2 --- /dev/null +++ b/README_gl.md @@ -0,0 +1,63 @@ + + +# Simple Torrent para YunoHost + +[![Nivel de integración](https://dash.yunohost.org/integration/simple-torrent.svg)](https://dash.yunohost.org/appci/app/simple-torrent) ![Estado de funcionamento](https://ci-apps.yunohost.org/ci/badges/simple-torrent.status.svg) ![Estado de mantemento](https://ci-apps.yunohost.org/ci/badges/simple-torrent.maintain.svg) + +[![Instalar Simple Torrent con YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=simple-torrent) + +*[Le este README en outros idiomas.](./ALL_README.md)* + +> *Este paquete permíteche instalar Simple Torrent de xeito rápido e doado nun servidor YunoHost.* +> *Se non usas YunoHost, le a [documentación](https://yunohost.org/install) para saber como instalalo.* + +## Vista xeral + +SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. + +### Features + +- Individual file download control (1.1.3+) +- Run external program on tasks completion +- Stops task when seeding ratio reached +- Download/Upload speed limiter +- Detailed transfer stats in web UI. +- Torrent Watcher +- Extra trackers from external source +- Protocol Handler to magnet +- Magnet RSS subscribing supported + + +**Versión proporcionada:** 1.3.9~ynh8 + +## Capturas de pantalla + +![Captura de pantalla de Simple Torrent](./doc/screenshots/screenshot.png) + +## :red_circle: Debes considerar + +- **Upstream not maintained**: This software is not maintained anymore. Expect it to break down over time, be exposed to unfixed security breaches, etc. + +## Documentación e recursos + +- Documentación oficial para admin: +- Repositorio de orixe do código: +- Tenda YunoHost: +- Informar dun problema: + +## Info de desenvolvemento + +Envía a túa colaboración á [rama `testing`](https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing). + +Para probar a rama `testing`, procede deste xeito: + +```bash +sudo yunohost app install https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug +ou +sudo yunohost app upgrade simple-torrent -u https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug +``` + +**Máis info sobre o empaquetado da app:** diff --git a/README_zh_Hans.md b/README_zh_Hans.md new file mode 100644 index 0000000..2545bda --- /dev/null +++ b/README_zh_Hans.md @@ -0,0 +1,63 @@ + + +# YunoHost 上的 Simple Torrent + +[![集成程度](https://dash.yunohost.org/integration/simple-torrent.svg)](https://dash.yunohost.org/appci/app/simple-torrent) ![工作状态](https://ci-apps.yunohost.org/ci/badges/simple-torrent.status.svg) ![维护状态](https://ci-apps.yunohost.org/ci/badges/simple-torrent.maintain.svg) + +[![使用 YunoHost 安装 Simple Torrent](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=simple-torrent) + +*[阅读此 README 的其它语言版本。](./ALL_README.md)* + +> *通过此软件包,您可以在 YunoHost 服务器上快速、简单地安装 Simple Torrent。* +> *如果您还没有 YunoHost,请参阅[指南](https://yunohost.org/install)了解如何安装它。* + +## 概况 + +SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. + +### Features + +- Individual file download control (1.1.3+) +- Run external program on tasks completion +- Stops task when seeding ratio reached +- Download/Upload speed limiter +- Detailed transfer stats in web UI. +- Torrent Watcher +- Extra trackers from external source +- Protocol Handler to magnet +- Magnet RSS subscribing supported + + +**分发版本:** 1.3.9~ynh8 + +## 截图 + +![Simple Torrent 的截图](./doc/screenshots/screenshot.png) + +## :red_circle: 负面特征 + +- **Upstream not maintained**: This software is not maintained anymore. Expect it to break down over time, be exposed to unfixed security breaches, etc. + +## 文档与资源 + +- 官方管理文档: +- 上游应用代码库: +- YunoHost 商店: +- 报告 bug: + +## 开发者信息 + +请向 [`testing` 分支](https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing) 发送拉取请求。 + +如要尝试 `testing` 分支,请这样操作: + +```bash +sudo yunohost app install https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug +或 +sudo yunohost app upgrade simple-torrent -u https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug +``` + +**有关应用打包的更多信息:** From a69fb69f9e9cd5d5374f7f6fbd3425185ca7dcde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Wed, 19 Jun 2024 11:29:48 +0200 Subject: [PATCH 59/68] move to Cloud torrent --- conf/systemd.service | 4 ++-- manifest.toml | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/conf/systemd.service b/conf/systemd.service index ea2bfe9..f92781d 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -1,5 +1,5 @@ [Unit] -Description=Simple Torrent web server +Description=cloud-torrent After=network.target [Service] @@ -8,7 +8,7 @@ User=__APP__ Group=__APP__ Environment=PORT=__PORT__ WorkingDirectory=__INSTALL_DIR__ -ExecStart=__INSTALL_DIR__/__APP__ -c __INSTALL_DIR__/config.yml --host 127.0.0.1 +ExecStart=__INSTALL_DIR__/__APP__ --config-path __INSTALL_DIR__/config.yml --port __PORT__ --host 127.0.0.1 --title "Cloud Torrent" --log --auth "user:password" Restart=always RestartSec=3 diff --git a/manifest.toml b/manifest.toml index 225e3ec..ff592ba 100644 --- a/manifest.toml +++ b/manifest.toml @@ -1,21 +1,21 @@ packaging_format = 2 -id = "simple-torrent" -name = "Simple Torrent" +id = "cloud-torrent" +name = "Cloud Torrent" description.en = "Self-hosted remote torrent client" description.fr = "Client torrent distant auto-hébergé" -version = "1.3.9~ynh8" +version = "0.9.1~ynh1" maintainers = ["eric_G"] [upstream] license = "AGPL-3.0-only" -admindoc = "https://github.com/boypt/simple-torrent/wiki" -code = "https://github.com/boypt/simple-torrent" +admindoc = "https://github.com/jpillora/cloud-torrent/wiki/" +code = "https://github.com/jpillora/cloud-torrent" [integration] -yunohost = ">= 11.1.15" +yunohost = ">= 11.2" architectures = ["amd64","i386", "arm64"] multi_instance = true ldap = false @@ -30,7 +30,7 @@ ram.runtime = "50M" [install.path] type = "path" - default = "/simple-torrent" + default = "/cloud-torrent" [install.init_main_permission] help.en = "If enabled, Simple Torrent will be accessible by people who do not have an account. This can be changed later via the webadmin." From 78755958aba55070e716a152da2f2879544293f3 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Wed, 19 Jun 2024 09:29:58 +0000 Subject: [PATCH 60/68] Auto-update READMEs --- README.md | 30 +++++++++++++----------------- README_es.md | 30 +++++++++++++----------------- README_eu.md | 30 +++++++++++++----------------- README_fr.md | 30 +++++++++++++----------------- README_gl.md | 30 +++++++++++++----------------- README_zh_Hans.md | 30 +++++++++++++----------------- 6 files changed, 78 insertions(+), 102 deletions(-) diff --git a/README.md b/README.md index da5d466..1d28328 100644 --- a/README.md +++ b/README.md @@ -3,15 +3,15 @@ N.B.: This README was automatically generated by -# Simple Torrent for YunoHost +# Cloud Torrent for YunoHost -[![Integration level](https://dash.yunohost.org/integration/simple-torrent.svg)](https://dash.yunohost.org/appci/app/simple-torrent) ![Working status](https://ci-apps.yunohost.org/ci/badges/simple-torrent.status.svg) ![Maintenance status](https://ci-apps.yunohost.org/ci/badges/simple-torrent.maintain.svg) +[![Integration level](https://dash.yunohost.org/integration/cloud-torrent.svg)](https://dash.yunohost.org/appci/app/cloud-torrent) ![Working status](https://ci-apps.yunohost.org/ci/badges/cloud-torrent.status.svg) ![Maintenance status](https://ci-apps.yunohost.org/ci/badges/cloud-torrent.maintain.svg) -[![Install Simple Torrent with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=simple-torrent) +[![Install Cloud Torrent with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=cloud-torrent) *[Read this README in other languages.](./ALL_README.md)* -> *This package allows you to install Simple Torrent quickly and simply on a YunoHost server.* +> *This package allows you to install Cloud Torrent quickly and simply on a YunoHost server.* > *If you don't have YunoHost, please consult [the guide](https://yunohost.org/install) to learn how to install it.* ## Overview @@ -31,33 +31,29 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Shipped version:** 1.3.9~ynh8 +**Shipped version:** 0.9.1~ynh1 ## Screenshots -![Screenshot of Simple Torrent](./doc/screenshots/screenshot.png) - -## :red_circle: Antifeatures - -- **Upstream not maintained**: This software is not maintained anymore. Expect it to break down over time, be exposed to unfixed security breaches, etc. +![Screenshot of Cloud Torrent](./doc/screenshots/screenshot.png) ## Documentation and resources -- Official admin documentation: -- Upstream app code repository: -- YunoHost Store: -- Report a bug: +- Official admin documentation: +- Upstream app code repository: +- YunoHost Store: +- Report a bug: ## Developer info -Please send your pull request to the [`testing` branch](https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing). +Please send your pull request to the [`testing` branch](https://github.com/YunoHost-Apps/cloud-torrent_ynh/tree/testing). To try the `testing` branch, please proceed like that: ```bash -sudo yunohost app install https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug +sudo yunohost app install https://github.com/YunoHost-Apps/cloud-torrent_ynh/tree/testing --debug or -sudo yunohost app upgrade simple-torrent -u https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug +sudo yunohost app upgrade cloud-torrent -u https://github.com/YunoHost-Apps/cloud-torrent_ynh/tree/testing --debug ``` **More info regarding app packaging:** diff --git a/README_es.md b/README_es.md index 61a2dd0..2e21856 100644 --- a/README_es.md +++ b/README_es.md @@ -3,15 +3,15 @@ Este archivo README esta generado automaticamente -# Simple Torrent para Yunohost +# Cloud Torrent para Yunohost -[![Nivel de integración](https://dash.yunohost.org/integration/simple-torrent.svg)](https://dash.yunohost.org/appci/app/simple-torrent) ![Estado funcional](https://ci-apps.yunohost.org/ci/badges/simple-torrent.status.svg) ![Estado En Mantención](https://ci-apps.yunohost.org/ci/badges/simple-torrent.maintain.svg) +[![Nivel de integración](https://dash.yunohost.org/integration/cloud-torrent.svg)](https://dash.yunohost.org/appci/app/cloud-torrent) ![Estado funcional](https://ci-apps.yunohost.org/ci/badges/cloud-torrent.status.svg) ![Estado En Mantención](https://ci-apps.yunohost.org/ci/badges/cloud-torrent.maintain.svg) -[![Instalar Simple Torrent con Yunhost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=simple-torrent) +[![Instalar Cloud Torrent con Yunhost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=cloud-torrent) *[Leer este README en otros idiomas.](./ALL_README.md)* -> *Este paquete le permite instalarSimple Torrent rapidamente y simplement en un servidor YunoHost.* +> *Este paquete le permite instalarCloud Torrent rapidamente y simplement en un servidor YunoHost.* > *Si no tiene YunoHost, visita [the guide](https://yunohost.org/install) para aprender como instalarla.* ## Descripción general @@ -31,33 +31,29 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Versión actual:** 1.3.9~ynh8 +**Versión actual:** 0.9.1~ynh1 ## Capturas -![Captura de Simple Torrent](./doc/screenshots/screenshot.png) - -## :red_circle: funcionalidades no deseadas - -- **Upstream not maintained**: This software is not maintained anymore. Expect it to break down over time, be exposed to unfixed security breaches, etc. +![Captura de Cloud Torrent](./doc/screenshots/screenshot.png) ## Documentaciones y recursos -- Documentación administrador oficial: -- Repositorio del código fuente oficial de la aplicación : -- Catálogo YunoHost: -- Reportar un error: +- Documentación administrador oficial: +- Repositorio del código fuente oficial de la aplicación : +- Catálogo YunoHost: +- Reportar un error: ## Información para desarrolladores -Por favor enviar sus correcciones a la [`branch testing`](https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing +Por favor enviar sus correcciones a la [`branch testing`](https://github.com/YunoHost-Apps/cloud-torrent_ynh/tree/testing Para probar la rama `testing`, sigue asÍ: ```bash -sudo yunohost app install https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug +sudo yunohost app install https://github.com/YunoHost-Apps/cloud-torrent_ynh/tree/testing --debug o -sudo yunohost app upgrade simple-torrent -u https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug +sudo yunohost app upgrade cloud-torrent -u https://github.com/YunoHost-Apps/cloud-torrent_ynh/tree/testing --debug ``` **Mas informaciones sobre el empaquetado de aplicaciones:** diff --git a/README_eu.md b/README_eu.md index 042abdb..901cfba 100644 --- a/README_eu.md +++ b/README_eu.md @@ -3,15 +3,15 @@ Ohart ongi: README hau automatikoki sortu da -# Simple Torrent YunoHost-erako +# Cloud Torrent YunoHost-erako -[![Integrazio maila](https://dash.yunohost.org/integration/simple-torrent.svg)](https://dash.yunohost.org/appci/app/simple-torrent) ![Funtzionamendu egoera](https://ci-apps.yunohost.org/ci/badges/simple-torrent.status.svg) ![Mantentze egoera](https://ci-apps.yunohost.org/ci/badges/simple-torrent.maintain.svg) +[![Integrazio maila](https://dash.yunohost.org/integration/cloud-torrent.svg)](https://dash.yunohost.org/appci/app/cloud-torrent) ![Funtzionamendu egoera](https://ci-apps.yunohost.org/ci/badges/cloud-torrent.status.svg) ![Mantentze egoera](https://ci-apps.yunohost.org/ci/badges/cloud-torrent.maintain.svg) -[![Instalatu Simple Torrent YunoHost-ekin](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=simple-torrent) +[![Instalatu Cloud Torrent YunoHost-ekin](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=cloud-torrent) *[Irakurri README hau beste hizkuntzatan.](./ALL_README.md)* -> *Pakete honek Simple Torrent YunoHost zerbitzari batean azkar eta zailtasunik gabe instalatzea ahalbidetzen dizu.* +> *Pakete honek Cloud Torrent YunoHost zerbitzari batean azkar eta zailtasunik gabe instalatzea ahalbidetzen dizu.* > *YunoHost ez baduzu, kontsultatu [gida](https://yunohost.org/install) nola instalatu ikasteko.* ## Aurreikuspena @@ -31,33 +31,29 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Paketatutako bertsioa:** 1.3.9~ynh8 +**Paketatutako bertsioa:** 0.9.1~ynh1 ## Pantaila-argazkiak -![Simple Torrent(r)en pantaila-argazkia](./doc/screenshots/screenshot.png) - -## :red_circle: Ezaugarri zalantzagarriak - -- **Jatorrizko garapena utzita**: Software honek ez du arduradunik. Denborak aurrera egin ahala funtzionatzeari utziko dio, konpondu gabeko segurtasun arazoak izango ditu, etab. +![Cloud Torrent(r)en pantaila-argazkia](./doc/screenshots/screenshot.png) ## Dokumentazioa eta baliabideak -- Administratzaileen dokumentazio ofiziala: -- Jatorrizko aplikazioaren kode-gordailua: -- YunoHost Denda: -- Eman errore baten berri: +- Administratzaileen dokumentazio ofiziala: +- Jatorrizko aplikazioaren kode-gordailua: +- YunoHost Denda: +- Eman errore baten berri: ## Garatzaileentzako informazioa -Bidali `pull request`a [`testing` abarrera](https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing). +Bidali `pull request`a [`testing` abarrera](https://github.com/YunoHost-Apps/cloud-torrent_ynh/tree/testing). `testing` abarra probatzeko, ondorengoa egin: ```bash -sudo yunohost app install https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug +sudo yunohost app install https://github.com/YunoHost-Apps/cloud-torrent_ynh/tree/testing --debug edo -sudo yunohost app upgrade simple-torrent -u https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug +sudo yunohost app upgrade cloud-torrent -u https://github.com/YunoHost-Apps/cloud-torrent_ynh/tree/testing --debug ``` **Informazio gehiago aplikazioaren paketatzeari buruz:** diff --git a/README_fr.md b/README_fr.md index 7dde426..ee357dc 100644 --- a/README_fr.md +++ b/README_fr.md @@ -3,15 +3,15 @@ Nota bene : ce README est automatiquement généré par -# Simple Torrent pour YunoHost +# Cloud Torrent pour YunoHost -[![Niveau d’intégration](https://dash.yunohost.org/integration/simple-torrent.svg)](https://dash.yunohost.org/appci/app/simple-torrent) ![Statut du fonctionnement](https://ci-apps.yunohost.org/ci/badges/simple-torrent.status.svg) ![Statut de maintenance](https://ci-apps.yunohost.org/ci/badges/simple-torrent.maintain.svg) +[![Niveau d’intégration](https://dash.yunohost.org/integration/cloud-torrent.svg)](https://dash.yunohost.org/appci/app/cloud-torrent) ![Statut du fonctionnement](https://ci-apps.yunohost.org/ci/badges/cloud-torrent.status.svg) ![Statut de maintenance](https://ci-apps.yunohost.org/ci/badges/cloud-torrent.maintain.svg) -[![Installer Simple Torrent avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=simple-torrent) +[![Installer Cloud Torrent avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=cloud-torrent) *[Lire le README dans d'autres langues.](./ALL_README.md)* -> *Ce package vous permet d’installer Simple Torrent rapidement et simplement sur un serveur YunoHost.* +> *Ce package vous permet d’installer Cloud Torrent rapidement et simplement sur un serveur YunoHost.* > *Si vous n’avez pas YunoHost, consultez [ce guide](https://yunohost.org/install) pour savoir comment l’installer et en profiter.* ## Vue d’ensemble @@ -31,33 +31,29 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Version incluse :** 1.3.9~ynh8 +**Version incluse :** 0.9.1~ynh1 ## Captures d’écran -![Capture d’écran de Simple Torrent](./doc/screenshots/screenshot.png) - -## :red_circle: Anti-fonctionnalités - -- **Application non maintenue **: Ce logiciel n'est plus maintenu. Attendez-vous à ce qu'il ne fonctionne plus avec le temps, et que l'on découvre des failles de sécurité qui ne seront pas corrigées, etc. +![Capture d’écran de Cloud Torrent](./doc/screenshots/screenshot.png) ## Documentations et ressources -- Documentation officielle de l’admin : -- Dépôt de code officiel de l’app : -- YunoHost Store : -- Signaler un bug : +- Documentation officielle de l’admin : +- Dépôt de code officiel de l’app : +- YunoHost Store : +- Signaler un bug : ## Informations pour les développeurs -Merci de faire vos pull request sur la [branche `testing`](https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing). +Merci de faire vos pull request sur la [branche `testing`](https://github.com/YunoHost-Apps/cloud-torrent_ynh/tree/testing). Pour essayer la branche `testing`, procédez comme suit : ```bash -sudo yunohost app install https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug +sudo yunohost app install https://github.com/YunoHost-Apps/cloud-torrent_ynh/tree/testing --debug ou -sudo yunohost app upgrade simple-torrent -u https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug +sudo yunohost app upgrade cloud-torrent -u https://github.com/YunoHost-Apps/cloud-torrent_ynh/tree/testing --debug ``` **Plus d’infos sur le packaging d’applications :** diff --git a/README_gl.md b/README_gl.md index 00010e2..3afef73 100644 --- a/README_gl.md +++ b/README_gl.md @@ -3,15 +3,15 @@ NOTA: Este README foi creado automáticamente por -# Simple Torrent para YunoHost +# Cloud Torrent para YunoHost -[![Nivel de integración](https://dash.yunohost.org/integration/simple-torrent.svg)](https://dash.yunohost.org/appci/app/simple-torrent) ![Estado de funcionamento](https://ci-apps.yunohost.org/ci/badges/simple-torrent.status.svg) ![Estado de mantemento](https://ci-apps.yunohost.org/ci/badges/simple-torrent.maintain.svg) +[![Nivel de integración](https://dash.yunohost.org/integration/cloud-torrent.svg)](https://dash.yunohost.org/appci/app/cloud-torrent) ![Estado de funcionamento](https://ci-apps.yunohost.org/ci/badges/cloud-torrent.status.svg) ![Estado de mantemento](https://ci-apps.yunohost.org/ci/badges/cloud-torrent.maintain.svg) -[![Instalar Simple Torrent con YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=simple-torrent) +[![Instalar Cloud Torrent con YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=cloud-torrent) *[Le este README en outros idiomas.](./ALL_README.md)* -> *Este paquete permíteche instalar Simple Torrent de xeito rápido e doado nun servidor YunoHost.* +> *Este paquete permíteche instalar Cloud Torrent de xeito rápido e doado nun servidor YunoHost.* > *Se non usas YunoHost, le a [documentación](https://yunohost.org/install) para saber como instalalo.* ## Vista xeral @@ -31,33 +31,29 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**Versión proporcionada:** 1.3.9~ynh8 +**Versión proporcionada:** 0.9.1~ynh1 ## Capturas de pantalla -![Captura de pantalla de Simple Torrent](./doc/screenshots/screenshot.png) - -## :red_circle: Debes considerar - -- **Upstream not maintained**: This software is not maintained anymore. Expect it to break down over time, be exposed to unfixed security breaches, etc. +![Captura de pantalla de Cloud Torrent](./doc/screenshots/screenshot.png) ## Documentación e recursos -- Documentación oficial para admin: -- Repositorio de orixe do código: -- Tenda YunoHost: -- Informar dun problema: +- Documentación oficial para admin: +- Repositorio de orixe do código: +- Tenda YunoHost: +- Informar dun problema: ## Info de desenvolvemento -Envía a túa colaboración á [rama `testing`](https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing). +Envía a túa colaboración á [rama `testing`](https://github.com/YunoHost-Apps/cloud-torrent_ynh/tree/testing). Para probar a rama `testing`, procede deste xeito: ```bash -sudo yunohost app install https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug +sudo yunohost app install https://github.com/YunoHost-Apps/cloud-torrent_ynh/tree/testing --debug ou -sudo yunohost app upgrade simple-torrent -u https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug +sudo yunohost app upgrade cloud-torrent -u https://github.com/YunoHost-Apps/cloud-torrent_ynh/tree/testing --debug ``` **Máis info sobre o empaquetado da app:** diff --git a/README_zh_Hans.md b/README_zh_Hans.md index 2545bda..3e5365e 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -3,15 +3,15 @@ 请勿手动编辑。 --> -# YunoHost 上的 Simple Torrent +# YunoHost 上的 Cloud Torrent -[![集成程度](https://dash.yunohost.org/integration/simple-torrent.svg)](https://dash.yunohost.org/appci/app/simple-torrent) ![工作状态](https://ci-apps.yunohost.org/ci/badges/simple-torrent.status.svg) ![维护状态](https://ci-apps.yunohost.org/ci/badges/simple-torrent.maintain.svg) +[![集成程度](https://dash.yunohost.org/integration/cloud-torrent.svg)](https://dash.yunohost.org/appci/app/cloud-torrent) ![工作状态](https://ci-apps.yunohost.org/ci/badges/cloud-torrent.status.svg) ![维护状态](https://ci-apps.yunohost.org/ci/badges/cloud-torrent.maintain.svg) -[![使用 YunoHost 安装 Simple Torrent](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=simple-torrent) +[![使用 YunoHost 安装 Cloud Torrent](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=cloud-torrent) *[阅读此 README 的其它语言版本。](./ALL_README.md)* -> *通过此软件包,您可以在 YunoHost 服务器上快速、简单地安装 Simple Torrent。* +> *通过此软件包,您可以在 YunoHost 服务器上快速、简单地安装 Cloud Torrent。* > *如果您还没有 YunoHost,请参阅[指南](https://yunohost.org/install)了解如何安装它。* ## 概况 @@ -31,33 +31,29 @@ SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). - Magnet RSS subscribing supported -**分发版本:** 1.3.9~ynh8 +**分发版本:** 0.9.1~ynh1 ## 截图 -![Simple Torrent 的截图](./doc/screenshots/screenshot.png) - -## :red_circle: 负面特征 - -- **Upstream not maintained**: This software is not maintained anymore. Expect it to break down over time, be exposed to unfixed security breaches, etc. +![Cloud Torrent 的截图](./doc/screenshots/screenshot.png) ## 文档与资源 -- 官方管理文档: -- 上游应用代码库: -- YunoHost 商店: -- 报告 bug: +- 官方管理文档: +- 上游应用代码库: +- YunoHost 商店: +- 报告 bug: ## 开发者信息 -请向 [`testing` 分支](https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing) 发送拉取请求。 +请向 [`testing` 分支](https://github.com/YunoHost-Apps/cloud-torrent_ynh/tree/testing) 发送拉取请求。 如要尝试 `testing` 分支,请这样操作: ```bash -sudo yunohost app install https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug +sudo yunohost app install https://github.com/YunoHost-Apps/cloud-torrent_ynh/tree/testing --debug 或 -sudo yunohost app upgrade simple-torrent -u https://github.com/YunoHost-Apps/simple-torrent_ynh/tree/testing --debug +sudo yunohost app upgrade cloud-torrent -u https://github.com/YunoHost-Apps/cloud-torrent_ynh/tree/testing --debug ``` **有关应用打包的更多信息:** From 5a7d74b7175cc1b8233a66003ba2f557398d255a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Wed, 19 Jun 2024 11:33:39 +0200 Subject: [PATCH 61/68] fix --- conf/config.default.yml | 4 ++-- doc/ADMIN.md | 6 +----- doc/ADMIN_fr.md | 6 +----- manifest.toml | 14 +++++++------- scripts/backup | 4 ---- scripts/install | 2 +- scripts/remove | 1 - scripts/upgrade | 26 ++++++++------------------ 8 files changed, 20 insertions(+), 43 deletions(-) diff --git a/conf/config.default.yml b/conf/config.default.yml index a529ea6..1d1691c 100644 --- a/conf/config.default.yml +++ b/conf/config.default.yml @@ -29,10 +29,10 @@ DisableUTP: false NoDefaultPortForwarding: true # Don't broadcast the UPNP request for gateway port forwarding, which is unnecessary in machines that has public IP (of which this program is mean for?) -DownloadDirectory: /home/yunohost.app/__APP__/downloads +DownloadDirectory: __DATA_DIR__/downloads # DisableEncryption A switch disables [BitTorrent protocol encryption](https://en.wikipedia.org/wiki/BitTorrent_protocol_encryption) -WatchDirectory: /home/yunohost.app/__APP__/torrents +WatchDirectory: __DATA_DIR__/torrents # DownloadDirectory The directory where downloaded file saves. EnableUpload: true diff --git a/doc/ADMIN.md b/doc/ADMIN.md index 79173d1..c7bc217 100644 --- a/doc/ADMIN.md +++ b/doc/ADMIN.md @@ -2,8 +2,4 @@ Most of the items can be edited in Web-UI on the fly in the config board. -You can also configure Simple Torrent by editing this file `/var/www/simple-torrent/config.yml` using the [documentation](https://github.com/boypt/simple-torrent/wiki/Config-File). - -## Limitations - -- This app cannot be installed on a 32-bit ARM machine. +You can also configure Simple Torrent by editing this file `__INSTALL_DIR__/config.yml` using the [documentation](https://github.com/boypt/simple-torrent/wiki/Config-File). diff --git a/doc/ADMIN_fr.md b/doc/ADMIN_fr.md index eca4d56..33b5a2c 100644 --- a/doc/ADMIN_fr.md +++ b/doc/ADMIN_fr.md @@ -2,8 +2,4 @@ La plupart des éléments peuvent être modifiés à la volée dans Web-UI dans la page de configuration. -Vous pouvez configurer Simple Torrent en modifiant le fichier `/var/www/simple-torrent/config.yml` en vous aidant de la [documentation](https://github.com/boypt/simple-torrent/wiki/Config-File). - -## Limitations - -- Cette application ne peut pas être installée sur une machine ARM 32 bits. +Vous pouvez configurer Simple Torrent en modifiant le fichier `__DATA_DIR__/config.yml` en vous aidant de la [documentation](https://github.com/boypt/simple-torrent/wiki/Config-File). diff --git a/manifest.toml b/manifest.toml index ff592ba..b4c9f26 100644 --- a/manifest.toml +++ b/manifest.toml @@ -16,7 +16,7 @@ code = "https://github.com/jpillora/cloud-torrent" [integration] yunohost = ">= 11.2" -architectures = ["amd64","i386", "arm64"] +architectures = ["amd64","armhf", "arm64"] multi_instance = true ldap = false sso = false @@ -42,12 +42,12 @@ ram.runtime = "50M" [resources.sources] [resources.sources.main] - amd64.url = "https://github.com/boypt/simple-torrent/releases/download/1.3.9/cloud-torrent_linux_amd64_static.gz" - amd64.sha256 = "d2f535e4cd0449b357a563cfce79c1f6afcac9b7b3af94e758defc44faa52ebf" - arm64.url = "https://github.com/boypt/simple-torrent/releases/download/1.3.9/cloud-torrent_linux_arm64_static.gz" - arm64.sha256 = "6f48f8b59bc8d834c6ede1d27ecc1a598b8a0be1dab00622caa6fd047e51eed6" - i386.url = "https://github.com/boypt/simple-torrent/releases/download/1.3.9/cloud-torrent_linux_386_static.gz" - i386.sha256 = "583898eb907c21dbbcb6f33934eae3dc1d6ec2620fdc7689c70a3479049af52b" + amd64.url = "https://github.com/jpillora/cloud-torrent/releases/download/v0.9.1/cloud-torrent_0.9.1_linux_amd64.gz" + amd64.sha256 = "21b7ce6eb9be944f7497811aea368a098c1976d61c5ed854a0003e455be13ca1" + arm64.url = "https://github.com/jpillora/cloud-torrent/releases/download/v0.9.1/cloud-torrent_0.9.1_linux_arm64.gz" + arm64.sha256 = "a4877e546d1d8844a745c6fbb0490aa43f06815833e23af4d9f37e1ecc198637" + i386.url = "https://github.com/jpillora/cloud-torrent/releases/download/v0.9.1/cloud-torrent_0.9.1_linux_armv7.gz" + i386.sha256 = "1038f55c5c6a4b0414e291c647f1b7f4c859f8c0de61a323abd7e087b9095bdc" extract = false in_subdir = false diff --git a/scripts/backup b/scripts/backup index 2d322c2..fd14fd3 100644 --- a/scripts/backup +++ b/scripts/backup @@ -32,10 +32,6 @@ ynh_backup --src_path="$data_dir" --is_big ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" -#================================================= -# BACKUP SYSTEMD -#================================================= - ynh_backup --src_path="/etc/systemd/system/$app.service" #================================================= diff --git a/scripts/install b/scripts/install index e171818..ea78935 100644 --- a/scripts/install +++ b/scripts/install @@ -43,7 +43,7 @@ yunohost service add $app --description="Self-hosted remote torrent client" --ne #================================================= ynh_script_progression --message="Modifying a config file..." --weight=1 -ynh_add_config --template="../conf/config.default.yml" --destination="$install_dir/config.yml" +ynh_add_config --template="config.default.yml" --destination="$install_dir/config.yml" chmod 400 "$install_dir/config.yml" chown $app:$app "$install_dir/config.yml" diff --git a/scripts/remove b/scripts/remove index 2848d21..94e73f3 100644 --- a/scripts/remove +++ b/scripts/remove @@ -12,7 +12,6 @@ source /usr/share/yunohost/helpers #================================================= # REMOVE SYSTEMD SERVICE #================================================= - ynh_script_progression --message="Removing system configurations related to $app..." --weight=5 # Remove the service from the list of services known by YunoHost (added from `yunohost service add`) diff --git a/scripts/upgrade b/scripts/upgrade index 5b57423..852f2d0 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -9,12 +9,6 @@ source _common.sh source /usr/share/yunohost/helpers -#================================================= -# CHECK VERSION -#================================================= - -upgrade_type=$(ynh_check_app_version_changed) - #================================================= # STANDARD UPGRADE STEPS #================================================= @@ -27,19 +21,15 @@ ynh_systemd_action --service_name=$app --action=stop --log_path=systemd #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= +ynh_script_progression --message="Upgrading source files..." --weight=5 -if [ "$upgrade_type" == "UPGRADE_APP" ] -then - ynh_script_progression --message="Upgrading source files..." --weight=5 +# Download, check integrity, uncompress and patch the source from app.src +ynh_setup_source --dest_dir=$install_dir --keep="config.yml" - # Download, check integrity, uncompress and patch the source from app.src - ynh_setup_source --dest_dir=$install_dir --keep="config.yml" - - pushd "$install_dir" - gzip --decompress main --to-stdout > main_dezipped - mv main_dezipped $app - popd -fi +pushd "$install_dir" + gzip --decompress main --to-stdout > main_dezipped + mv main_dezipped $app +popd chmod -R o-rwx "$install_dir" chown -R $app:www-data "$install_dir" @@ -62,7 +52,7 @@ yunohost service add $app --description="Self-hosted remote torrent client" --ne #================================================= # ynh_script_progression --message="Modifying a config file..." --weight=1 -# ynh_add_config --template="../conf/config.default.yml" --destination="$install_dir/config.yml" +# ynh_add_config --template="config.default.yml" --destination="$install_dir/config.yml" #================================================= # START SYSTEMD SERVICE From 5b154f9407fa47a20228a0061be30ea533edeac9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Wed, 19 Jun 2024 11:41:32 +0200 Subject: [PATCH 62/68] fix --- conf/config.json | 0 scripts/install | 6 +++--- scripts/upgrade | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 conf/config.json diff --git a/conf/config.json b/conf/config.json new file mode 100644 index 0000000..e69de29 diff --git a/scripts/install b/scripts/install index ea78935..796e1f6 100644 --- a/scripts/install +++ b/scripts/install @@ -43,10 +43,10 @@ yunohost service add $app --description="Self-hosted remote torrent client" --ne #================================================= ynh_script_progression --message="Modifying a config file..." --weight=1 -ynh_add_config --template="config.default.yml" --destination="$install_dir/config.yml" +ynh_add_config --template="config.json" --destination="$install_dir/config.json" -chmod 400 "$install_dir/config.yml" -chown $app:$app "$install_dir/config.yml" +chmod 400 "$install_dir/config.json" +chown $app:$app "$install_dir/config.json" #================================================= # START SYSTEMD SERVICE diff --git a/scripts/upgrade b/scripts/upgrade index 852f2d0..c6a841f 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -24,7 +24,7 @@ ynh_systemd_action --service_name=$app --action=stop --log_path=systemd ynh_script_progression --message="Upgrading source files..." --weight=5 # Download, check integrity, uncompress and patch the source from app.src -ynh_setup_source --dest_dir=$install_dir --keep="config.yml" +ynh_setup_source --dest_dir=$install_dir --keep="config.json" pushd "$install_dir" gzip --decompress main --to-stdout > main_dezipped @@ -52,7 +52,7 @@ yunohost service add $app --description="Self-hosted remote torrent client" --ne #================================================= # ynh_script_progression --message="Modifying a config file..." --weight=1 -# ynh_add_config --template="config.default.yml" --destination="$install_dir/config.yml" +# ynh_add_config --template="config.json" --destination="$install_dir/config.json" #================================================= # START SYSTEMD SERVICE From 0d94cc5debce569fa8068ea2bee984478d70713f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Wed, 19 Jun 2024 11:44:51 +0200 Subject: [PATCH 63/68] fix --- conf/config.json | 14 ++++++++++++++ manifest.toml | 6 ++++++ 2 files changed, 20 insertions(+) diff --git a/conf/config.json b/conf/config.json index e69de29..cb02177 100644 --- a/conf/config.json +++ b/conf/config.json @@ -0,0 +1,14 @@ +{ + + "NAME":"Torrent Cloud", + "AUTH_USER":"__ADMIN__", + "AUTH_PASSWORD":"__PASSWORD__", + "SEARCH_PROVIDERS_URL":null, + "AWS_BUCKET":null, + "AWS_REGION":null, + "AWS_ACCESS_KEY":null, + "AWS_SECRET_KEY":null, + "MEGA_EMAIL":null, + "MEGA_PASS":null + +} \ No newline at end of file diff --git a/manifest.toml b/manifest.toml index b4c9f26..a0871ed 100644 --- a/manifest.toml +++ b/manifest.toml @@ -38,6 +38,12 @@ ram.runtime = "50M" type = "group" default = "visitors" + [install.admin] + type = "user" + + [install.password] + type = "password" + [resources] [resources.sources] From e539cea25966f152c5b8053ece16642a2db3947d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Wed, 19 Jun 2024 11:45:28 +0200 Subject: [PATCH 64/68] fix --- conf/systemd.service | 2 +- doc/DESCRIPTION.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/systemd.service b/conf/systemd.service index f92781d..1d4c8b4 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -8,7 +8,7 @@ User=__APP__ Group=__APP__ Environment=PORT=__PORT__ WorkingDirectory=__INSTALL_DIR__ -ExecStart=__INSTALL_DIR__/__APP__ --config-path __INSTALL_DIR__/config.yml --port __PORT__ --host 127.0.0.1 --title "Cloud Torrent" --log --auth "user:password" +ExecStart=__INSTALL_DIR__/__APP__ --config-path __INSTALL_DIR__/config.json --port __PORT__ --host 127.0.0.1 Restart=always RestartSec=3 diff --git a/doc/DESCRIPTION.md b/doc/DESCRIPTION.md index 399d154..22fb010 100644 --- a/doc/DESCRIPTION.md +++ b/doc/DESCRIPTION.md @@ -1,4 +1,4 @@ -SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. +Cloud-Torrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. ### Features From 2ceb65f61baf4def440087f9e807ebce25543d64 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Wed, 19 Jun 2024 09:45:32 +0000 Subject: [PATCH 65/68] Auto-update READMEs --- README.md | 2 +- README_es.md | 2 +- README_eu.md | 2 +- README_fr.md | 2 +- README_gl.md | 2 +- README_zh_Hans.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 1d28328..2eb2f86 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ It shall NOT be edited by hand. ## Overview -SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. +Cloud-Torrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. ### Features diff --git a/README_es.md b/README_es.md index 2e21856..7e71e60 100644 --- a/README_es.md +++ b/README_es.md @@ -16,7 +16,7 @@ No se debe editar a mano. ## Descripción general -SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. +Cloud-Torrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. ### Features diff --git a/README_eu.md b/README_eu.md index 901cfba..2c57f62 100644 --- a/README_eu.md +++ b/README_eu.md @@ -16,7 +16,7 @@ EZ editatu eskuz. ## Aurreikuspena -SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. +Cloud-Torrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. ### Features diff --git a/README_fr.md b/README_fr.md index ee357dc..a91ac50 100644 --- a/README_fr.md +++ b/README_fr.md @@ -16,7 +16,7 @@ Il NE doit PAS être modifié à la main. ## Vue d’ensemble -SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. +Cloud-Torrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. ### Features diff --git a/README_gl.md b/README_gl.md index 3afef73..74f123e 100644 --- a/README_gl.md +++ b/README_gl.md @@ -16,7 +16,7 @@ NON debe editarse manualmente. ## Vista xeral -SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. +Cloud-Torrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. ### Features diff --git a/README_zh_Hans.md b/README_zh_Hans.md index 3e5365e..02ebb47 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -16,7 +16,7 @@ ## 概况 -SimpleTorrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. +Cloud-Torrent is a a self-hosted remote torrent client, written in Go (golang). Started torrents remotely, download sets of files on the local disk of the server, which are then retrievable or streamable via HTTP. ### Features From 30ed6d205ecc4632d7b9e16c74df9b931ff6674a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Wed, 19 Jun 2024 11:51:45 +0200 Subject: [PATCH 66/68] Update screenshot.png --- doc/screenshots/screenshot.png | Bin 45357 -> 125307 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/screenshots/screenshot.png b/doc/screenshots/screenshot.png index 80407d3b05d6f3f1c04498bb64f5b3f72a0c1fa5..80a304ef788bdfa8a67e8558aef208b24cbed50b 100644 GIT binary patch literal 125307 zcmeFZbyQr*w+2cG1PH+`IKiFZ?he7-gE!Jx;~IiPfZ*=#?iPXt2+}w-PH+qE@H#X1 zH*WWh7K#VBm3JV4kBOzJT6& z!4%g80|SR*B`&TkD=to^>|}3YWor%t!xI^)VE`b~z!qu)SyE7rs@ZY`ITs6~P@%+W za^%#v`YkPS*(J(yEs*b+T^@}l503J%w>{)2Nh*7@?xkV(b~SwOiuAI0Hm{k^_JD+ZBdsicFs@IA!fU8mhbEy%fA71NdUeNI zJ!6!uV7*_uvzcp>=CYJs<8W;Jm<8+x1f2nUipEm1gaVI^_3s!sskYZtdgV)Fv!w13 z*KL44jYO-E#IzU;;TNA5ms6_>F^(nl%OMD*omu%64dHKmw*$G(7}uFX$GEqL)Vk-& zO5^&{yIp&mICW1?`Qg5Vwd$pw3^?5Z)iO`FH}^PGhrK)`?r+;YWG;Q2vUm@7y?4$6 z6PXb13zFgkaC!qm{c@y4FSpkpYZm3upW|B-Y|8pE$L68xv1}Ls3wOrkU*U02k;>!l z-}Hsbz2fMx}2Q&pXRIh^x%suM?#X37$6jZAiyU1?}e; zX0#$NR&eJ4B>|`}*sv?G@xzUBEbs`ozX+W2)u)VfcYck3{PxW#;HG)Bp581(=p$|| z!F^OY?xguiS&+Udmas1)H>@x}8B2+cR>HZ~=wOIHFoCv*X)2Ia^6X z0q&WH_D}4pg=vyYy!CC_@1NM|-|4H(mNTL@22%{v-N74l-1i&R=uCS{oYpluIIp38|0=z0DQ55`xBhf7uH97=6Lc$3r)&5 zaWG}O>fAs;$DSEgsyqq)*7`;hUoldm{5;@1q@J;Z#)tNyzhlH_$Y;c7)Ti43HimyV zW21A8*?|;f)PHGxMxeXmh3oOU$#OT*rd;j~g)I&VuG3epH5FsFQ<_(ZreZ2{{)rX) zceq(BnS#Wqrlea%clw>on$N=SYGBV59yK)7cOByCh&AmMcsfO~K2eIBeTwH&ziQSx z%OOut+EledSL0X1Dyf+gMGL7bbj=3B-rW;Vm)O;+?oF63`@rf<^4aa9jNrJ*PsEuJ zRB_QKrta;87QYVu_AUyb7P0`;C4@g-K94?6V{1dh(qooRzkBtiQ~2cIj(I(*9ww3K zgZ}`9-RrR-gk^Z1v%rN~NH=kej5qS?)YZXd*Dag7@59vYVlSwCo9ROXH-ARg%CYl| zkjPURjAf+Xv+OKy4dwTb_AoHdGOg6LowXI-@tN8KnT^ftP0X3yfeui^0Rto8&Ic_5 z&7Fn@+NmAkpEwuBYX+ztfoLx`3AEvvvE75-me{oUnnRdxQZ%FXkS zn!kPXUo{0-eo63~M1QL5kGoKP3B43x`AhdgFDrzjb75daU}Pmk)!m;RWFUECU)(&A zlA$A_kHWylFo?bhM~_CYr<%c?N>yekP#3U%*@*3nBVQ3u@=b}b=0Wl#`~H!$KqJ4e zSR;y*irl8B3$hV7XTx%L zHLPwb$H1nw*~?1~FgfH2{|)JXdMn1s5z~eJGDp*S^X@bF-J*URe+@!DpVl(Exm_vM zV6a|l<)osdr1d*oXrQ>UnJkQCQIekzEjsC+)FuQyHmt{W`*Cqt$TL;jU9}*eUtXG? zOWj~BD0>8U^6YIzg!qvmRp_Za9ffhw7CcAUo%Zj{nvP&@p&iV6ruRR-=S;yL5K;E` z_jk{CC&S-@tp+5k=Q@47kx94~rK^pn9MY@e^?o3u;#Gf@#rn4jz6t zfc%4}bN0D!hLyH8-rjOc#-U1rCP{wQ!|`44rtew6FyQOXWALs_D3SkwVQF>}w{M}I z@xUe0xl}hw)CkPCMcy8QZUubRScqC%V-DPf0{A2Yjo@Wfb`0eZOe z=p}gSf?RI{+h>sK?eR*PN)wNI#Uw|h`8XFQs**9Aw@=)5zJP;~ell@d#O^}0uJS^T zninY%V*i_~F^Tzr2op`rk6Zn{MLYzRGBt=?-5FCNPvud9UFCo^d~2gbEz=Ev;Slzv zMm~wT5iUXTHb;v(v!77Obeew#93G$ymiJs1cAGR>xn;{;G~Ye{A-Q>O`&i(7IL?ew z!LOUpVW1)(RHd$Z(d{{)Fr>QG)pkkix9h_{xj2aLJpZ9GYG1s2OMLalUNq2*8(Sn?fyryrsA8XFT^UG}BO zzkJgC^G(a+^!v2XohnRS=l-ybfk#{VMX7mg(!j4Wo0F78HBYy<3P7>^7}8`l^K_Rj z3fs5ZeRRFvoSVUQWluVBg9r$GF&pjkYpww=VK2NZs*Ef2E?DLmCDhK5fFFPJhC5j3 zkT6|;6DKFOiybgUF03SQm|Q#lwt$#Z=58Vy5ctPJ<|F{o=o30tl{6p4^_pA0|vt%z#rFNWQ^*gTF(8hW&);$kOp1HP}ltb&|ULA58&a(}8TcW4Eab#CU1 zLH%Wr6hyyVfS-A;vgpC4+KsqAGkiFlEn$HqN&c=jfDoL-j=Gjsk+V#CWoUmkfKH0y zTP#3_fC*O8@hJCFe4UV?chY^ssyvd@=wOC$HZ?p%DYHOl*j1SWdrL8+MFg#C&h+Y9 zg0pL`Iqm5xn$RG-7*&qLi(2RuS3}c_dBn(WK&^$Mq~BtF6mI|Xhlc(&0>x_ zz}7Nq;{0f^nv?>Qd`c8iIqayX(T$ksgxifiFJl!Gh~&=fUw94bv&wL+D7ijw^>My; zK0hcK#N26WBrd2jn9y*1aTY!CyuM`bHSn%B^OD$gay1?`9^6G?z+26(&{~*e8r`Z$ z9e{}aWOL$G@1f_MWM#A(j8=>AUhbmIpMO_)s9pfp2(0CN`|f;HSX>O{YS>Jh6VoK? zgMN>Y{fCkHIhsI>zb91WjEpRbe~M}>H)pQH>x$Yjk(@(9Ph~;adFOL(4ef)Rj7%uN zZ{4c>gkxsQk?Y0_qe)B>V_k4;IWv#gcL3Gc_o<`%9R106=&J;<_+*LcrCQ(5;&U9?uJUC_<@g-z^i;_hDL1U z&4B>oGq`lj;%ziFg~RSes}&X0zisk**avqH%>YIZ+-^g)7gk2MZ$3&QO>|`ndP$Yb z|LG-qsbvD`!}W63<&UR7&+&b7oznryogfldE-77R?qGLR8*_Km)}$sShtwV|w-AqXnFfklNen#q zKQ>I0JGJEerh3!%Xc=dG$t6IVb?r#)ayU2o77bH`EEdky*F&H@n?Lq2hxvDldk5Eh zR_kt%NH(gP+wo(*cwho;H=5Bu@ljT|@41V(_@66k+ynf2b3?QETB>Em#oP2lq(nw; z%*8OC+eGoRjNRPIND4|`r}bBYk7IK3OE{t<8&?(+o6p;HhgeWw`tmyRjC?1SdwRH1 z0z7DTSrh|G1RakPrlJ}MF+{%5`(qW2rdr_4Hvpns4gsksVPxp6u+>O}tntN&e=C|G z=*!L7HjZ(II9aYuXv1Jn(3uFwDEj9UiSjSk_ir(ZgSXGzqXsKw{ZCw#E# z=ZrcKpr)c8|L7$(;RQhhPck&s5O*MRu-g~c+Uho`g~Iv2K>q;x^x})S3IwjSlgF;@ z)yv5t#X12CdHE5lgCxJ@@I> z&WA($$+e!4X@ixjId5;MYJKjy2^EKB1!D-RmTF!^i!KR!7DhQ4xQ*Xb!72b1+OKhS z-|jV8b4ho_5R~Qh=PA=dzmP#{LzRaCWr ze82T>?OTSAw2suK+&uVInIb9+oZ(t`X7P5|Rf%ycGM{D#wHtiK?YjKjZ9+vY#HD7uzh6hgP?2;{$IChb+Y?_>zmGvmZib$MaCgP;b*C z>d=>jTj$iKh?&W)#_i_lGT@vJLMz}o0TTMAdj2RFN4pjH9sWE11rkTRW^U>V^-A8rzTGptXfG0mZEj^0&jg zm%i0q$AhLnxQfu=K8k8<8UTUf9pJ~8_ zZwHH)6EV9o;FZQYYSJDb)_gI$^_$5u%j{bUNtZI&KdY*hBM(YM97-c|#{pg;gw!Nm zbSk+1&$?EgN7&x=@BgD4$a^HAi zJDIuG=~EMg%dHh4A}^Oyr;yO0Tq`q$;38azL`9~yjV!8XfB}H@UyAwumGN4H9!fEIdC+O`QCBu#>gy=2T$xDfesOD zky4f>JuZ;-rVf+D_u5!`RF$5ALA(?XMG}J+7Y8ROA6~lH2Rnpm!k$JY_tDN35^?aic_`j0>Y1JYFM}j}@sdtN#*5skTu`9vMMNLbJ`u)I&jAFMRf= z)8<-v&Fn-#`=aoz34Dj9F3^USoD3r;@II`%*uk0_#pJNhL9~95Ry}x?!J^P(XZXjG z48WAx0bMjafh^TPP3J>{mh^`LEyLu8<5c4F7szkgTy4vesJ7N6-k%S5+2%xFy=JkT zCOo&orSE7zVc%2=^ndc%#)*#y9B#z{vInU_innnSR56^gW8+t(OEMun-miEK{g|`8 zq(IV9hY^hF-aApl3HN?prg%&y73Oth+aGzN*pSJ4y&VQM)kYRpPrp`PSB&jYZMhvs zT5%*ieGO_X-z|2}K*PM2BPI1JN$;45F5sIv%D5@I!ciD>xR7l{RP%eZ#UDJmd+sL# zKC@=ISUGd2I}~2`c-x>_Rs9&tsdw>p{tQp7Uj5?q&2Q0$$QS%)j_Wy|-gYa?w|lwa z;V&&w_Tpoy#w><210rOE3&u`q9_%Ok7rcU|Hk{kLeL}Z7Cr_lD%4x=?)%t3HZ+bd8 zFSb562TSk}+lViGlA3SErYGUUxIQID8Akzbtdq>JeAHZ6___9M(w4mZcCcwu;jBJT z!Xu|^-%k#w`tF9X8h?eVP@Q#r9% z6lwKINwX22YB|e!Vc0ceFR3B49cx82QAP5e`mY@1H(1QlaA2 zG9O|vN3cBnbc`-MGLmzp|7vRVv0Dlcm$As1wev+7?&gYt*DJY@=){x9Esh1tc|=z{Z|bqrz3=Jww(~CbDliVC>(Tg3qB85^w+dfuL@l(5zkL)8 zoETCutfVYP)!5ospQ|P5)7f}Yh|+G?oK8K#LDZ~uM`X&_t~&+q3>vE6YZIlD*dK2= z+J~t+bNpPLNITpB43S43I2ZDJ8xc))YtH4a3xM!;M=JG2w>bqg+~fSF#`#GJ>+t7T zi(A#5Gf5gRl2DeD3fv*?VMRLV5YHY}y~f1cxv#^1xg2IG`SZ;^1%j8VLAf61MjnsI z@0!^ZQkaJqGhSk+)vkbT^%Al19@(8sK28dKi`{M0$zyV-tIW8S=mC!T$DQA8ZYIKo z*XHZk3h1I_)n&KTpJr3}=T6bN>@!W`7-uu488&Uomno!eF_iJWbGvuM>iGHP_0r`# zWKeE3Hya*$WqE3+`8Eb77L0Ib%ch^Y%0Qse-$7!iG;HarEKz1XkkI!cfky|)wI0*T zE>Aj|t3vgb?g58}QZXnT8gIFp-Jb8NYibrA-TJb#v-?0ip%IDIz7wBe+khs-;%8%~ zU|*T%r(C?NPN~?&8)f`MVU0X&uiHJ?0WrxUQ4?qMv#)%)lv7UjUb}8BphoN+A z5lOt|ycl#Nva;pec9g8OCw~=@4^5WR5Fr+4P7CiLLDsDaD@G5%vIJW>60rOJNR)E< zi<%99^fgy?Q|Dx^aJxPRtAFl-8#v0K-jn~K90~ramhv9K+n0t0UdX$(hw+)#!21iW zEu?>V%?)%Ox6!(Vfp8HOPqO8-Ebr67{@qVaGX`z0K@~=~`>t)WhkkRg%df0`%QiIj zeOCPurWEwL6o=ut*Uj1$2M87$54y@sl^o}flEiB-5643~r!8$|+A|PoOdHhv)P6)F z=d9ONvh1wkc%^={msq&Jr81azl#(b_rN=nr#NbJRKM7q>4WJ*dSvRA|=;(?fnTdN* zGcG|S;@!L-Y9h``ltp6%k>X9dYTTrxS`bKj@QN<6)NK&1Eq7UWDRH)XGUFT2EjLkf zxY!!QN%OVN)V>#V+#?dKKiH@i$MQGW`g|1cVx=T!Y)^jV2HA9b+eN;k#@l2SGYm2 z2?Swk^WG38L6bNSQs*^^CUsSqnen{A@*wKlH~#?LXhc{x z-RgkECvR18er?DgW9UXgQBj>>Ac^Skkp1g?o_u%DO)hbzHq|P`PZB*94yi42%{rt6 z>TW0O;QHfpAYwwE^_gkUTFjhe7_}ZEO9N1%sbJa?OsQ+BW;}%3@FE3IecuqUtR%cs zot`E9j9M^ic|NyUIA2dSS&dbkcfN=-j$->;DW^(eWL*u05WMO|n#0I#ySTH+~pb7BqO)?-2u| z9xxW_ea8K>;^xJ*8A>(!K6wt^UPcb{>!8u2Eh#J#P*r z7pLXNBRGc?r5z{IOu<$s)pvlD3*Q<@%I~3x-<8sspB8i_<l;WjO0JL z;V*!T70H_l&5THQu%|xq=g%HAwe8UiVEj+Bit<;}?pP>&X?Cq);o;$ovqhI$hh5Vj zt$iEXr=3cDzOLR&omdOyIp?`I=>M$x?-S=KpCw6HV*@ec+qvx8SmNCAn#xh=S#HS} zw)UHT)Y~-$jbTlS^?6hs6{<0f2j|Y`$KX9Y-OO6nKh5ELnytT=9?q2%r`7BkDCg81 zk;jbu2(S|B`O3jCjCwYJlH(>MSPbCYou+~PZeA&P&Vbb&XV}so73a0R!hOIB+`2O& zeNV5fjvNsXC7XT~nHXpCRWgc_ihZI3h zLU_sNmz5089W)3@E%Y5Bxec_ax*r4d_n{CLhY0&yp6KOHfNuC(eIe9jcvhdcvG8f0 zz_Lxu-Z-!4A4j%lU(^TY{=V}OL$0i%f>BZ$Pc^2=iA^z6JQ5xo8(Z9I_(a@VSQzYi zv4^9Y*GmXrQdJOGy3v+EHA2yfT2!8y5tibXT4amADpA$)oSxIKanlJ z_=?>kDE#Ql{(ER$yG=Nj@hqAf zlCSTjUfcIg-Zbk??+el>z~_DkW^)yjSywh`BtTAG_+ zL-Xx^!ERmf(I%-tduBNS^p1!GAL)|Io*$3~3H4w4`VxEk#Bgk(SqeBTfRPrK8x#Kf zwln%2+)>-HP;8ewa!E-^JrKgRWc;*2`ZR7%ej+8hXG6CJj_E2Kkb2O>AhN!@&+PXY z&VPm_lPFBFgB7Z?JF)KPS1G*yIvmF+^&So1vn@RXSN~T;lbsNOR`2?$-&&QK5AeI#_Kg1ASki1XM{y( z4@mQBZ%G9sGaQ|T=i8}WTepv*k*RtWNu5oOv!yWq<{Rr4#j^AMPdvXxgm|#EQ|gH+ zx(3$tikcsZD$p2}g>`HG?g-}1@Ez@#Le zfrOFoO+m(%^O>BWYF5VTuXxzH!04D{G1n~4t=((#s9v?#i3A!5>w93C*K^CK700=z zErEX4FOf6xJq=vyYNcY_7g4pRt@p?7WmYu|LB=A`%I!{VF_v|9Bae&pJ?N9I| z>(0GLr)v1_+o(+Y92n6ZQlcE#cO2tt)hbI&RGkYFX&U`+>-}o;a-4VPMpbz8#3GrL zZRi%hMPAf=3FZF{=7fPW3HX4RxoF3oAy{TVGz5rmT5=^cH#f(pBJ8(cZs(OKriJZ0 zKX>kXUaygpyI}MOSOT0ZL=ik67e9~7y6-(zbreL*ZGUqiFQ9H1HJA1A>yoyZGs{AERUxcl+>x_vRjq*2OX|aph z^GdoBKgXT;lI(i>D@y5M->Ua*;TCJcSyST*BN8wSAJ>(xrtw|10tX*l+7StHL%Rcs zZ9x-^=Z7SFCv%Kl`C-+U;i3i#8NS}lccGQsn+`4mpjLMW+(yLT{RP?kB#}1P!<`?4 zaYLt;7+du~o00Re9yH;18T=5VX*C@k{0T|0ayt|wEG{mlrBq-MyDedkNqB@HDGo3I zz4!H2am(iqcHPp<8=xzqypb^6 z$v+vJ-q&}o)A5NG6zvY;N7cs556}1_f9qCw<@OqqA@F6vj7tgy^~#|EGi zt4T{k;H?=Hj)Q}P@tkZS4C)yRRCbF9>L0W=zWX-Z9DdTO0QG;upK7qt@;nDimvnX- zMxx$9a>Nl*`Q4ZmQrM_$msejY4nW3hUR;SUJ+1x>>82l}Ftt?9hftQE9T2Af{oqIq2oiX9Ms!JyGH1hn5Ly6pZ zvmZC^N+U>pGld2tMGjF)l_U#!bip=r7EoDTfp_>^Q({=P%)3@Q?$W{aah&*Fyc3zM zh8Q!c9wbTTS4p+AhuUblNO!YY(V84=gsrwZqvqgZsoz0Bm}fL_X84teSx{DnI1~;n zgwhC7G(jsqS26dT=AV6`h%dxI%GRyja|643wPDs!K3e#Zr$VoZS>zjjx-cs%xM+>X zVfD+Znf#sN0AX0oo{Pho=-9+IX_53yVs8DWbGhe(t)e6AO@HE7RMd5*gUW`=5?b4S z!{vxf{S!Ky3VaCJ;?OAW4|}uZ&90Fkmk`&j$(!MxqIjw$BrZ>t_4}t5Wxd=!wpAh-_%DyQIkVl$sJa42uT4YK-6Q zNIkuoh}S6)xRFt5GF5tD%JAHPoZnz z4o-Kx)FC6#B8i=M> zj7rdgAc2~TN~Q{uR{b04{h2Y18y8!_K3>jthG&PpR-j`Gpw4r~Oz~#(Z;F9_x#WJg zpK9=a&U|WDLk3-&a!5-Rxa2`u0z1^hH#o;)HU@7);eJb{0GP0{va;%0+cmr_mpEy4 z$||=-FLs;a&<9V#EsA(5tjfp7e?f?B{c77vDo_xy{{58w{BfONiYSj13b9S|Z5o>( zbpf&|%i%)&yR`hnOs)oY$voiR_0P;ty^ZS+evcm_`v`0}bcw4O<(bR)Z0Wz%>n0g? zx*`Dq4y2|Dmpubx`;Qqxi+LhG5;ep zl7phz8QI*7SS6-5b0SzYJZU8gi@OdZMxH8|eQAyBR6YlOgU$3E2nAOt$J2WmN@%K& zU)|m%$%XJ!XPv}O*gskeK3wm*C3L~}ZLWpSDdLG*%@k~1q8NGFR8@Gc+?=Cluz^Le zj8&Qx{f7_vPfwM=$s8|Bfzo--!1lR>I>O$zCLQ;)JOZ_f*45ep#Z06qYw%sIfZI38 z{xidOu(sDbA1YWYy)Cn>9?K@$&H_Zux?EGZ=0d{+W3j}y+8bNY+=vSV5$=t28m#92 zLAdb;V2v-R3i#f;*QYg2Wi}cuJnGUD#mnj$>e(wdQZG$k%0rCWGA0tIXRMk?23HC- zY+4W3^{!{NpY_RhEcja8?dMl+Y4>;b=JG~~6)6e7UecrCa?R^Z0gqg+N+4dXUIpvX zYjs||UOI=MoS$UoC7#-_52_AAe4jKwI2lz zqe+b~TX|TlZs%Id@=n(THYRH6Rr1;opMN7<8mo`+)9qLqUsH1EUNE&|!=jh-YSGy` zgrA*HzuLSXB3xRjj&NGOx1;k?UM)i+R)zlvZhX`zLl-k9Gz1!oVJ5bN~K$jm?8Yn*| z;yu+R*}XsPr7@hw`!3kl82)JdK5e9W{Vh@n9kJC9bkk>Lh|ozqx8TF?Kg#Af`zb8M zYA``BFJj-u#rZB;EN<*f_0&=uV2+#b_Y3~5fS9zOFBE&5K)5*QE80|QF`tC1)MEkB zsX<*GH4!90xJcDHuDk@-vuPg%_^MiU-^)64V|Y_?_0-!R{DrXJB0LmPqgltsR-SHQ z`X*b!C#7cHH$G2yo$Id$X`{J(4-t&$XTxRT3F)rh;0bm(rE#^)+g+JeDCCjNre3)c zvB^mZ{0+{15Wz+YtyXL(qUFNXcw>m&mJNwN7jL+seNYR^YE1!3^#4Jt;VKlFs_idV zW(@-tj*Kr^yDUa%0|dz@Zr3}zHhESO=jofBV4Z_8}-J7T4^ z)r?kIFvGn~hR3i~^mNW6uYWbuxKMlccIg*03QP~`F4B1z5mbPy626~#KWR5q>$g_D z0eYaqT*vphx91wi3;8ZsHFi5%@MfXB5T)sZgwCn(No$0Hm+sJgrQc5!Pt#%FrL%Wi zx2ad1%AhHu+79L9+QEsMZ@b>?p*_kPFNX;jo zKbC*IUFPfn>|4?Rb|E$U$tJWA)%J}Ap}o(<4~?c{V3x-{zSOr*!s^FdS42dMA9$Q% zgp1xp0{IN_rOHO_mU`x5dbM%)I&K^zja4uJq136Le0slBhHsf<9TD&3ElKYx8(bF* z0_QE({WkHDStJ8acxTSB?!2W$1DV!2ByIJ=9h_#9XyP}sq;3v-Ee$3DdM`8PwI!-~ zpcFIJGELH0fP15{)sEqeAvQ{xJEHLY)_dK4Sbg?xw`sfqoNklZs6!bznGg@V^Mlx8 z9>P*LLN71Po3P1rn~0O#PgmmNk59y87$OYHa_w39tTC!##MRIeSiKtZIg@-ZlMt< zztrlY2Iqmtte@Qzf~IzLv?RNpM=X&|dnhkVDbq#16#XZ$Z2`oo@5NeHQjF^T=!O8E zWe!uYAFn;|7@U$XVPfe40?=~?Q=djv;8aj5hOIp?Xqg}SUaKk9YVN-ry}E0wB6IwP z!Tb&L=*o?VTBowbKgl@_X|3MnVNE)(xFZa~7=v6JgF5W~sN*mMdo6b^Eh)kFr z!_yiP10^y5tb`5W!r6R{&%d9S)ziLeGT(iozI^$x+sU_}Z8-e(>L;wE4#`t*hgR+Q zO!We82H8Sp&?FmEr06L7+Li9EkfiurI0arxgvn$bF9HTZ#1{_z@t4?CRfy+)4~sJn zeV_ke-2Im`MmL5f=5x;eVKyecf3`g~nIj&O+lj54C?MbVKXKaDR)W)K7T*m~Rj;nv zPX>c~%SMv&xZ;j*Cns-Y(!}~47Axa9YSJX@6w`sNQfQCn_ z{^`O|pY(I3sJjSIWu3X^7g>G9LsUR@trokNhG&-028lRD`hqt@>|VmNP#L?bX*h8T9mySo~kPnPYvH5rjOibmAa z>gv^X@qfxRL8;+l{0aO{wve>%`xF_y@Tzl00y`&u%?(Q-~7Z~6w7 zMQ7-c643@+j18nOGCrMqc7D28rLv6*Ho{!3A9EcJdw&pQ6vgVYXi}uedt~!?=h>Q^ zbkr~YI>`eAXDP{iuepyIp~j7F77JsvKZHi+UqJB zdG61qID5I;W1{pY;>Pk*j#oJ$jCc7u!lUfq^P)%!qPFNf0D4SU^4siQV`BjMF+Oib z9x2&lFN%;Czr_1)ixJFFrjS$+Hg<-&Z=`6OJd^GI&G2al#TKu!t?{-RVmg4`*CIj1_>KzTwfU7EzMf>Gl@smj?bTcXB2a4mU)W_?CW|u)rEZQd({YT@g8kp z5_7P2fBX429Fi&d17nhctn7(LP@?%D0vd_BEwhwdGwnra9CnG;1rL*9X2DXw?y0S_ z%pdeh&AbibitC?J+qu(mv<<(uRGE@F0)6{3bGW@d;~x!tlS{1?!QC5{30(01?4G;Fy)37$U#~h{Yt}0o^AF_vT6#4NJztOdzCW%! z+{MMMRD5r|BYDuMWof6|`5gfHuqffM zLO8*%*0v^d?=r&69=Vv`W|?d?`2)}O&U_sWv9PcHOXdz z=P|~3w!S-AB+fw!O-N5_)HzQF1OF7#_RpwhvSilu4H&(@+qrNWQz2? zWz|E>F%5J1Cy|=#y(Dx(!_5=urli6_h$>9G&7&M{8;I%2}mK zP5W?z_jEHxP2Fumc(x6?^}Ej0?iWo7A+S~fX?LXClrl( zV`{(D+CZ-TPDW;RyJcp`nwc{$RJ~Vfy#=%_0~cP}A;D?j%kO$n%;;h_NnJ~N*#Mkd ziu&Uu$>C@~@K%U&O%9yO?|W5$aT>{}5kr-$p%{n*`MJl zI8_{-UMhlP;n{E5^V%q(zvlb*XI?%-#4+8JF(LXr_x(p1 zoeFy3O$v!4^?w}nuhIK!Ll4cFloQE*dj8uM-d}3@qmU~BBi2XjFU9_kwtrv6=nQaV z>YoxQ!W@4`i~ms;iANMEeoZwFc=50Om;}KDhSxYzvZDS2yZKAW&_XCCROUQ5f{}l; z{k!f&%F#b4vuZ|B_CNcLTL1fCVPI9Dhxkn5Me^|fy&oK?;`)bTdU^iN2LGuP5i+@7 zGGhWbp8snX8qD>NDf->~Wb2?SZyNunh6%^}9F%{NK$n1|0;#{|y4F34b`Ue^~E-YWgj; z!{vbvpTnw%OfV`jpK>&b;D6X@BR6r&l zxsy(SH`CLxF47=V}ztsQy7JzLzK9z_Xc(A*esc4cYfp}LEt20S_5c=~I`^!dB401yyv(s3#mhMjPP4X{C zXH^H~33pz%lnhgGPh6|e#gy{e?bET)71lo3$pOD_;5Ip@xv$y@85tVLAH~}awY?ds zW}%ryzQd7r4t6Sy(6%0W$eCSfMa3EtB(pfm?>1k#b_v8%EO*e4>c0>z z4*=?*xa?*P&K|w8d46X2e3RU6pI`_S6EV~`>BM{WNKd~qGKPYW-n&@=<^a6y?Rk)B?GNU)GHrVbNMjEQsgt_`sjo^Kp`B2oXJf20X!vB`cee zG$$-8Ft-w{Wvgl)AkhzZRz6;)xj%jBXMnas#^I z@Db%Dg}`%U28DYLGKBW(TC(v`~0MLI)l}E;&tUuQng4vTUt@lU!d! zf;F+?Hr!78#fH|qDH2P)kf>piTlzMbr3CVGr6~}V$s-Sgte9?Af!lAW1RjY9R0n4@ zIwG2a6>m;?^KG9}ErUC9!IYv&HBMm8y=l-&w5*4NbKI=90bb_tkbsh(UCm z`uGY)HGdrxhq7&S2OiN0jRS$&kS~M>*0)nW?eQj>3MH zl1|eHN!xk_SYLzKKYHUZ;rNq>%%iOoQ<#C&b|-Iy{BwWo+i$P;&F1R}`I9%D+?&3c zg)dR#o;s0E9`4^m#HMoNWl9x{2_9+itSBpxEEQ1+pB?UU=)U*Ft*mDu-i|_(ypD9w zv^V5CqNkS`o4}!!L!FKF;IRAQOy9&2(t{-(h5PP9L!+R7147TMJUjUqqwH^E?}s0) zA2zZVp9{cBDp4GPj0rZ(u3`uj3aw|ZI3DW=p~oR)`W+F&-tuy32E zI%a67!MUglFw8=@nFTzADi-P!pvOdZM{pu^wE77X$8vQnNOjxie-tz;Gf{MDR>l}t zS}yD{0yh>}2e6ONM&ygmOYR2qu)bsTSdQ1aq?Me;Rn&Vd4Ri2IOKOX?M957O-+%nT z`|PF}l(rpEWtM(7#5U9jWxg*phaNx6L{qY+Sc6NBWvNjLe&Wku5BAid%jX)G=~8(7 zv?#M-Ez|IR0^O7L&mdx48CLsoQTZd+@az$CmB(gf$>r371WVQCe%4ieR^11u7jP)! z28v@WmjcP7Pol2MMVyhGNxAgSs98tI$JeDet zi;QEj9wi^EkdTj29>(9Rx3!rtjW~L!wH(ZRl+6zpP-7ugiV${BIjuTJWR%~+Rhh0p zrX5)=&^Rub3op#wz4%_d!Nk=WHb(rNd+d7&OOa*AmF&!Z!3cwea=6Iq7iQD zssL+6$A#2Ut;z5fD!K2U=w|QWV5}2$XJ4KcPDE0p>c)3E9LJ>uRZ_sS;xZ2dn!8+I z1(!V_Uc0E`@s|~2*=!z^f31$Trciy7ecU)nCf4KRpFfD^VME`>3q#WPi=BMFZL{?F z0)&pMVznZtw;c^eFnpu!B_yPRvK|_k5%z8I-Me}Rk`s4#-1)45RNe%lgBsD@fbU2z zg}Dn3ADFXNk1EqRw-B%OGeId@4sUL#S@LK7L^$leGS1gw_v(uuc_(onQ|dO%v0&G$ ziq1bVU6||fC>7Z@y-U^O3Dd8W9IH*18`@IUZ5)j#yDV@&h1GR+!BI##oP2)PfKiLF z<%t`+Vi%ZjW80*dcdxl%Jpn>EQxJ4M@-Y`0S;ikeI!D5ucD9a_;;v0;U8f@2Sdf^u zbG^2>QY~r;=IHksoYhKk^NzM22L)BJ9S4ti z8sqw(;TR*vYd&Y_&t)wAKkU6_RFqv8FsuluAfn_AD5yx6v~-Ce-Q68SH_U*bh_rMM z&CuO32uR1!-7&<_F*Lk$hd%fBJg)Wq`qua7{WA;ZT(kE+yUyPGoa^kx%H%oM#8*PG zLfqdx<9_hcFLbfY18!|5O(`u`y9_xPL2uS>9jL~7?uC3la#5+zkB_~n`=+P85=gJ9 z`p(~nQRM~;PNcA@$E|9k^Fcb5Aw#@Cia%kz@jb>ozkfKv;Be@eRHN6rRQvqwVv7@j zmyGHxbkg7%SL95y<7*r;u6UbW#_W95K{86!%1DHMeSY-TDAYsi@VewO_eXQl+t%sF4dpGG9c0$DDw3gL~S}swD#l zeGymLHy*h~8Mu5e=U~WfGx)H9;A1G#EdxT_tUoET3o zVos;>TovW!=IlYH@lvgG4)ztN2`6%|fy|b3C$!5ACe0>Os{ZbE;}=dEH=`bXAjVVH zeY5dnNNq-Jz7!EgUtUWMfhQ_{+a43`QN4K4`3?>@pa)hlRyHTbm&dSpBG1Ix4d`@| zRO+KR?@_JJHiyt-13dH1Z3^zwxIa_+@I08C@c}|u`0yMpTzkwaXUR#d3fx38Qk=BN zpwu;y^X@|-*-1Y!ntu`xP@WPI_!Qniu$9E zn0|v=e|m zr}kt*MBYc(a~>beqo($K##P+shca3G#DIhKa;NY|GjXb(>m_?nJ_AP8YI7Bwnw57w zfS?$2+=Yrnr5+!g_=?74tC~1>uw^66?bFB_bd5xrY2p5=hv@EIE6{m3`UJ#Pym&8| z9~P8oUUenJOf?a}3!|`Ny*UBS9taW-Kk_{4=I^CQmZmsO3W;y_6kL0RCtdA|W-ST# z3P10Q@r6-WuNx)Yp3Cnh^jt@!s+$u#zLxBRd*uiy+Hw-h*a!FEd;)!(d0;2K&$Vvn+~dh@jzI6UE%1=65u?@hOko z0SOq$&MJ2zQ&l`w=7@l1Qu^9(3cN~9o%YJEwQ$KMV`^2FMbj^OI85?E!9hfq?50_A zX?!I|aZmffv%SY!>j52W0CaB;POnqreu}kTTA?@BuE{X9d7FBHS|sZKE$jFkCM|Q!cd#2pBgY*By;TEcHod<;X@qu8OcXO)YToe16Su^$c)B$ z=-77gnz&#ng~KC`C11Y0xWukz2zj->Gsmk* zl`pteyA?0ifr;h9+}tsxM;PbYwXO_nII@rP90r&)UplC?uq3+GTkcwbonFpId~h&P z+8ytcwZY++4{ib_2vE_iinD*Jx}dj9fhE2G8yhhfj;r-mKRNf$|D4dvV9{|cP0L;v zW_3zo%=e{&wJfHq)pIk`6?KV4&^okS;VD2Z zzF9Dm%kp7stUYeTKr9(kmb;R!fZt063^%V*2%u?q;zSyN zs(L}zM5?e4nXMS?)Q55O zEyu``b_or3HY)!}S#TUd)YEy>Gb8L%xjNXc3Pbf7qBvca*>2ubHsQfQ`yppAZR#yG zAyf`q6f8Z)rAceOLQ?ng)N;HV+&UC*I8AVS;FDvIl?8F}nBo ztGwh}AU%`jb(uMK0rk4EV_=G488?4dNy=pIrwvp3~c0CaE)1wgMRBqu+#RI+eCn|=Z8+SZSB z5EcC+0CVYir8`Ct54*)ug|x*|BMC?5qG$N~l?bI!Vb%a5=ppsabXo8%{pN}Jx@SWx zu2Oh|Xgwj`QdV(2$lG_hze3>sk^cl1k&-)^eg7Kq%MvB=vBX!Y!VXu-rj=F0BNP1v zaf6TajCgNuEWL}E8m^ZD4#ZIz6pMsbjjEwyoeMh?U3|+miM*2&;{yV*?;8@IABb~I z!I|~MwT1GsdT{5n{7=`r$Z@7$aYdSWw1e)>Jg;aq?ofaRCD;z;Ir`X6EAdTjh@x9ubn5l6kcCjlj*YWsN zYBllLHaZFfGWzP3xLo%Lm!DEV{2BDtkHXe5!!1dy2lEWaLormcor35#gGMkN)XHOG z^PbTMHKK{b>RzrNB49A}0?LV5^IRPWbb6SOu`BLPOo#r8hsP=5p=~be{v-E_>wHy= zd8#pRfzCPpd35_Usitv zJ!vS|lS{>SIm83ovU}N|gVG06SLl^L+u`ovTJjN0X`$Lq%-AjAM}jsMWU@)(g8m5b z#|af}Qj6{LnDbFovFmwV?*$q8zQTKy!0-wGPe(a5}Eu16gIwlO6dS*RGsc=E{K8hDE z>J+rkr7EvNo&{c3N~FC7!-eYNiHHXvdFNLx+HgnVHy&^*@9Mz^1m*;X{EA=?w;{ED zuhwL3FwSuF7{`;{Ilt7dXU*Iei7nKBuYUq)>oDtBLrg-Okjgab#5Ly6K{x`800;nK zr8mvZuR4S&MbabcJBAIcDrP!j)RZHMd{4sT0Sy@VQMnY|lK6-u?r0(Rk(q&xblD;_i2hqStlV4IDT|YpKdxM3E^Do zcK7`K<)tW##BpR|P2C|U%&Yp#5nh79eWt4_9Zr5bc$#>u=B^f7(xGivdSiq6$aZ&v zREjAJfxGrgty;r}YoSI(EJN*Nm0Q@MzhmQJl_^!${qtE$nN$zFv`r(T?Hm`pQ`@rTUo zg59%=tfmW1AJqs$POD+PwG$f;k3BZ0gQoazCk63m0DaI?*2Dtnq+|Cv<7%vv7&^P< z#N4J3i-vh=vg~VgOozd8$w0jOOyr@f-=BpcHE0#w^&KRK9?1%ItG-h%rhsccCW;)v zUz*o9E%wc%a|49CnahXj$Lk_87{}`FG!w84B|9Z%d`ZfgU~f}W!~3&(Xu=~O(#L&t za9Gzfy^p__NS+qjxczDBB?Foa!gBRe$zX=35-`G?2y!D|3xQ=$H7_AzAE;iKT<+lm zo0$u68C4q;s~Y+y*h|>CX->PoYvEkr#djO9_?rPhQF^hs!hC0m{fX(_K#=Ti)Q5`T zD+&khXfN;>8bfy)Rg#*bUbW8pS|Wdp-Z&80YiLea;lv)}Wx*!o)vu3ecFTi#H@YXN z@h{cM_1@1nO*(Hovd7GuKiV@TD@)|9+G(h%c#m)lq?>qm#GY;jt1@{U`kd(aDZ_UY z^qM+n`Vx{rd;7P<=0eR0X6^}eFdtxQ!6-jF%(LexLb0S~92`OEkP06^2UjGl_omdX zSY8#m4bLvfU{!_oOof0w5R;9e7nN^Z4w5)7)xb1|SFJwXSKw0j6kc_rp=q0zQ`Z6W zgSl2x{9@d{56ZnT`tyjKwZ=qu6b;UZT=HAP`0-+0zP8HPZ>Uo0z3}0)f`9-|L0=2!*_&<` z#q<7%t@)JxF%CSAwrZgEw&NSCYI9X9!;5&sq z%5{2$mmT)U3RBwCZOejv8@>_-k2^vk75kiTvrMusGtUYd@!S)#XiDF=t^oEF1*qpW zZo@y_lqwT(M#ESPE@eDf*sa3eUo@TbF}{6Fq(q}M5UwKosCrCUmn^-5M$xQGY3p52 zV+(^MT&+^z>3u4zxBae7r0gm&wuh?C?)mgjj>SE=R>g%yZFq`u_W@=y<|5u3Dj6Z# z<`*0>!Rj&o;AU=!GE0?UcD_kZU+;lRk9z1f>a8H?QEQU;WyQpIkzlUyPdoV&aTfrs z9_i8y)xL>P)dB(11Z>a*QHJJe!lWv8<|brE%ZO!%-0n!)!B7p#9jPC5Yju?Uw(o>7 zm(#1k!EJY+?NCS#a+NS*>G@q>aON==(H#wcQv9R-Rs-cDYDGD@Fc!#cIz*>i%fbjE zi)LL)3}3&`Y6d?C9Mxp?L_t{hq`^eMTL?4QZr?%LE7e}{z;oxiAZ%PvakWScq-Jj) zetgneVK_<5(3cgos?rmUD|~lCFKmzf-BDpq6Sl{63_|}l4FQ~XL9IYTZpG5d?DWln zVqdJcj;PBzoPAHBBABP4(Kju`!gRgTIjM;&MW1~%tasLM3dNg)g~AR`YLyBsyAkxe zKE-`;>eg&V$Rp{=*MTf_j$~@73VAN*DcxyV#|0zcn8sS*3*&q*^ zbRJIq!BKC?Hc@Qx;wvbp>_^o|2+zny#{o|?>-RI!Y-CAG^9dWfC`8<`{B{lg3G_+> z$1~G$^vwjNpJ+@%CNF8`wkT+`@zxQbd9T6*hvsz^ zt{j!oZp%v^aZ~c1?!{xZd|K`E5J*01DlIsZ({9S*f%?)8En9JP;XC%{Xx1ihfqk}= z;%9J8a@`iBxZC^(4>1mp#svIJTt)Q49!-M8?E)pPX&Mi=`$#20i!SMdS9Z~dN&t6& zoR<^EO}st~?Pz*_#rO}qbva$rhjluGF|EobW=#> z>quM9R-(<*K{gjWzi?)lDP!qV_L7uKL&`zM9^JH^+*=^J+_~Q2QG}8L+8%ZIA23W} zECT$O?YAYL;c&SV;MZBi;gmnQ{)P)2zDiCqnq{cZ_y#*a=tq=oKh!E;Kt;mk{wEvZ z`|FRJsIB)RAff6)=k$&g2R;$W&Ur1Mwm9vI7K-;bRqy9gf0#MKFJz1Doii-7h)Oc@ zdrdqzU?~{wDkqsTTgyh;AU(byBQ~S=-=4^O(Q!32=Q5F9Yk`B;Ibc2j8m(I;uw1wvHm}f( z_P@U-XI1V`7Usxec4Mm31A(#DnGYWZpz&=jNIy&L?48EnY|+lStgQYKf5v#DTv;=T zG@W0&a^Ef$^1!vr{^5(kk)n^z@0-$I`t(p7yA}zoHascd$JXz@z78FYy=>H%9Qk(t zQt|{cgi!R?swrty~{rO2RTLO$!Bs!ct1opKtZD>x=!kmvf=SsEHMK6(*=r8qTER zAu3fukZ-yaj8}`>W~(VpLde|Xedt1Do8?e>e$uD>=J3||boN8mOJ$>?BcokrS((`F^;xZnh8CHQtfA4rF~0^Bk(AAs%+~>rFQH4W0ly z8ZX3E%94R6A_E0L^6}i@AQP8QK#j=(3ZgI6N}E0AO{%Mdm1L_rtBd>On{?afc9U_R z_xt!cYx98DSf21e9u=c2nG%~}`oNo3YnrNXG*dN+T7W$#5Tip|K`KTQYX<9c8=A>Oi+zCpe;a-e! z0V!z=IruVaX?CCCx};0T@-~wlIae@M>xqLO3qIffj!!Rx94nbyyo`zY79|wZXf7s+ ztiK-H?voT4e%bx??>%mdFX+R=!y834^TT73(YxcLqqIJ14c^^UaT@*8fTM#Ia!~;O zAMzwi(U# zURnc&{ofIEDK@&)6E7%q-cwKLQOOZIG3N1koZ2G*3E>NTY0 z=3*DHcEYwBqQlYYXqpaCJ8972yDSkRiaSg zE7Ir>B%amZ>SW$m>yzo_`RzTNs`K!y!uY|7@@{EVN6#H5BU@S->#X~=6y-dGmmgYh3xbP7SIc7~G_zZOMS<;R@{5 z3XWA-L?crc%0=(+L`F7TVkiYNZZ~h|IbeAL8Oz!U~qx+b%C7@xJXnS+eMDX)9EdWdh~16?3sp!2N)#oy_h4O$AX%d4l1 zwhPcXSIs6gbsYzPJ?G${PqOVfygF*&gu(|Q&WI%{Q$#RRc;9HculRkYoKUL6Pqtw+ z0k3oh`HvG~N2HxK;t+Jr!VWiVNd6}4hyBpFDhAuGoa8=K(eki8`%$+-@<8EqS&RUF z_-RKR18Lf7sSvcsgU7PN1%RHK(rh7s7Tc_x%~*E4#y+i4@yW{Bo%##@4M|_o7X7X0 z2`i9G^b^CyYsX{?lA@<#t5N{`$x(uI7M-J1s z$1}Sx2U(0gDQy0ZodllGv;E=uMbl47 zEh%$Qbp^GHA*QH)Uw3w9=A0OoJPO{gL_qEteKE1Uh?~S`Hi7G=s%dX6=h9jPPY4!`8E zcGKShsTIacWE+B+9(At276}N9vQqf_=;-(4@A0h0ugXn4MspQMo4nkPI<$o8KL-u* zOC|>V0I3pz*~V2WIK_?@i*Z1TZtA6--#OcE<`y*fz}ElV zu;^p^h(b8t03(}-*dZx;Ygo6&UbKiN)8ncK0hl$Z4l3VZAN*1nhFwf z$jpcPAaLzL%6Y2mc?>jpBv=YK1I4NKQ7e)nQ)YALDdje0_3C^qF0xi4xT4K06eysx z1!cUTcdIRn+lj5?H{BaPShiKO7WP4N9aU-^b)0pFJ#K!)G?&ZXMQM7>x4>^m!=K+q z@f@1qF)|utIS?xT5{>9oPtT8gVXeOn^&YPTXZO8fTASP!3W(_fZ@03U0ll@6lOU3` zSVQ)KlK>_1L8kX&8WqK7=;AKR3AR5-0C)OprxVQs-?6!mbVQ|@+3{MH`la^*m{tPu@1*8y1;wak9m5C zQJaX15?nX-4bIgA&x8HTxYyk47q!0o(VdXIA1SD3lBUylG1vi(OK-; zpM|5XF<4y@P1MhnRZf|n;=zsAjUDq`O}Gw>=yckul9UhvbZ(KgUToSp z0S6*`A?vYn7gd0mRV=q1=1j{0|JRva+-8M=I;yy)ydWm}=D{4Rrb)oDN-ArjfNBr? z29MMO^yeK45gk^O$3`MSG^J1Xz1(g0gR7F}ZdGmQ(l;SWt$(^SC_g_Z(SmCmEw;_4u&8~&7X=P(GtXwq%> zR20Ge2U6|QIm){f>PllzVRb6Ky;j)Nk21>^dNQuo%7vK|sIRqVsU&G3blWNJYedLm zJs2sdaklKZjz^EoGID^Wl>4&ogG`oaf>ljl#;4f&X{~(IFD^i+>O`&9Jj9O9S_-U$}Sy5C$5bqf(+bi8NwpsVz~+BFcGn)$4+^Xpib>% z1m+eAq24~!YrP@UXETi{{ap1X z?(buh%>>skgq-(Q z+EbZo&QE14!Rw)+0Jiq34B95jz`h{9ryhHw!@B9JcuhH?1)pgO9GQ?8zGNmj0Ao;& z3*oGEP^xwW#GX6f-_1XK0F7$mfY<>F5OZuJ_ z)+?9LI!Y$Z#MV1ZyE&EoGEb*m+8<7&pG8a1Xu?FY@4|RizRW!HX?~_RgJE>Id~8j8 zu9xOgkgOi|yd+V!rOWSV<m&8zV3j%_i;^A$8(+ralL$>fk^abubopQnXJ9^)+T zqwvN(M>n6N)Sy$BjAmKV>4Hif?KX*BG>r?qMc^Sei=#d~Cl)DwdZR*|oS=2^mOkky z8auhZ8LOLFIkpR2dsn>jg0vskEmpHma6)=o#f|AC<{tsa_-DZz2c%V*>2 z!8|9YvwXqUR}*}*5e6+3yV%Tx)ocomt3$2&q8o0+oTN%_f!s6;@0;GVfq6jgo9C{X zz*Fon_R8`kM%sez2<^8$X1b?2*jWQ^PIFyz>zidpiHCjhhZD;AB~RmI&j9LusthU) zA7k;{pmL;(QlvBjE-@#-e1P{5f%fvewqMO1U6>CA@p&unT$9>L6DHPsxnK?+weFS6 zdX|nA{i>n8WRob}?=ADGwr%%S8{xslNv6gFgXfZ*?OqcfY(B=e8txh;z~{f}D&1y7 z&JzXmcC`?kxf61P23DJ%+BMxxj(*eLoE}X)ap-%n7IT#i&Pw+V4YI`>`Ydwe?XlE= zd25EkCy5bDuQSQ}-Nwt=s<51%mRE}NTdVdMh)<hfMa=y&I(uJOW>)R*dx>s_NDnCOhp-{c#anE%<*f%l~a1t#a2PJNjKgM>eiQGK-Enk4cH<-J6@KKPc)Mg z_}-D%x$0FjtOs>^HkSAX2o4Pc=p=p^+IQf(2szY}J%{L!Z#9$vB*ZBJ<1EHpqZt{B zTxRZlK<@8dS(ocmmAQ8nb)u$}FRX)K;HcpnOpL-NLW22(dy~r}o(1UH`WIctvW6G) z7^Y^FdoUTtw)6K3n0+k*o;Z+kH#R==j`6FIm?Th#Q@P>hDfEgUj(N(P^f}!Nt@Khb zLn<`!CEl&2(})!(nFYr(IfzsYFARMWywWjWH;!$xV($nGx~kWM8b*X(uJ9*4HAS>m zsJ^Yfy4ek0#b*bMPTka8D(voR#n)J9WyPkgxjDE<_6`rWWZ(1I$h&0Yz7XJ^-Wirs`9>F=PpU&cO#r94uH00^_`s&OYY=Bm1w|t6H$45gvU>zNH2>Zk4=te{D zvc*o50~pz~F+X^H&KMeLnb&X=ezL|&1~l3T-ZKHVS(3 z_RC3-TMLlMuNfL%>I-hGuf4ANV|IfhZe!DQX?#LgD;c$GI)}yuyJ7t0y0_(fHH__d zwG!bSbzfWvSn1$ZNnTfPv=4h$2p6fv+` zhCmOpr19n^qrbNBO^$GPD!hsj)XZpquOV9RsqMAYJnR*ZD{VQ|?gi;`?;`Pr05XOO zxpi%-?i3QJU$oTZdKCfL*HE6&jzW$j0Q%$;=*`=pm+{KV6G^VI8`o1zSbAbC{1%x3 zM3(&{Hz(RUN*-;>EyI3PvMx1f!r4*%;<6=jEAv3e&iPS=o(A5@If3riAef`p zxnCVKWos&Tx1O@;6u~(Wfu&CHxj*HsdC#W{#bQ+BYXiE-C4}T~QjvyCVRJd24yYOQ~j<4VQIFn-Pd_6VQ<*v90*EB+@DsbHB zJ;NMrlN72iRB^jf78HS}ZllnQw_fR}AG9*shwbRtPao`7S6nkkT$MZ+>e(ICxt(hl z%hk3cbS|#mHiRLma|DZ=%f5tJZrYJD#7gwbqV5_`?bVG6@ivAh;G>Y^|@YNaQs>qX3LL1dgYQl(J;ds03872U47 znH5{~O7#abGCC{Oo=md_-%q_WbK9LwM1E`yEO~Vg2MS0)T|cCQC^9A%61CgSxuRLPSmW{m=Rv$D&E6JFlyzEHAKi-84WEbIJ2VXEG*t}uxa zeLos=yw%#oWIE*t?=IckwJ=5Y#MevQER~7Z{5j20#=cZ!5DZpgw4=E*g z*>>^;s7|oxSFeT46cyyOlzsR!ZRp~Ox@QAPBeBT^G`sbt*KDJSRvwe6%Re_P)R;P~iRtpH08~Q6q`uX9z^(1#Q&8YT3%q2RN-%9j5$fG!R z6%GHxC;W$*p=0H4Y$A7j^RaSWrB!PzX%Q$G;|kB-%AsiaQ&0c?Nc)0LIx*-yDa(oV zS)x;SWkyfU_{PNl&*kOge|-qE-L;~p9?2`{F!2eg}<{Nm!vQr+tdzx1%RID9{2zz67XV zcK>GN-_!C3|IQ?Wh28 zS7Mq`=KD}T&^mHw#s+mNjMK1F@PB`V`gyME-S!p&TxA`ZgR(@aP-MM|GGFhpH}q^7 zTf5mCR7$3L+Sl95E^d*;Ws|t68zuBx8F0QrU41DxgL>^Nue~@Y=J4of=i|M{xe?da zG@67eqj%{_YYp2ldowih9tWektp2YC31i$HQvgg9>xNwLg^uZFY_7hZ%Dj@MuJkMcteA7RJXhTCFR8o`U85i8Im>k-=gj+MS*^FFG}FI zkf*4H6rcH{q$dc;uj5FTqw(%a(&N3{=Y<_9%5r0r9oGT~Unxb4mq5-yB&|&A2O~@fr#1hK=aQu9Ar4 ze852cPj(4+V36*((5-kG-v9L#4mSUONfom9zB-;{p`n|r`ZXHXn|YwOdBfuBr+gtN z$9F$z9VS3AkosBD%fDwRJV&S?d_e4@tLTO;+5JRPY;k1Flank4bkA92_{pr>Ak`;~q zc~0_Gnj-ka1CxR~6K>UD%`oi0kojKFpxnq!3cFOuKXiUTx41|~4-h}m`-o_mPZfRq zHw%0VpQ1Rx35mS-S7h?v;!HC`>CkuxyVq|=Us(UCVf}fl!oSt9ToM$moGX2Lza8x& zMU84Y(epg{t(I85M{%$JZ3XdfN6Y^l9Z!~ejQ$(NzvG*Tnv@3nz&6HjNB@7EvTu&2 z)9Yssewv&D1buocMct(w`rMJRMsstomdeX@s=i8lXVa&+{2_Mrc;2uYZC^ynPAYLt zO{0JpJ!24G+ng%1mrZuc<=~gv;Do?m&g+{l8aiPG0_e!`k0B@!qw5Io_V@B?c*`Vx zOYV>@8hPpAI`wU(&~75UXs?emJ9}qr3M_;W?zL>30fUdKWzSwz+-E)J!*CTB3DfL$ zZGcx(A*E*LIIECMq}pNa&)&_tNSni}EFw)TuXQ+XXgakQuHLI%ZBp}DU*unSJc%a# z$?>j_f4Y~nNUDG4%3>KUJk)6#F@a@~2C3kxjd@tuBrU zIs6rkoG31KecIk2TEk$`YieP>oKqsM?X9q8-nJkFq)r!QA3aZUfI+Mz98 zQ(;>NMJ|!6N1|IU(YS`%(CgQ_KwK_7%^TqH<)3D%=5`aI!?9IXYSjaBUM5SihbI+= zTU|QVdwH(r+TS_IbzZ{PaZ)5Q42Wa6VbMZ{Ki`#oy~xA*fe3?tQgI%yl*iM6B-JNrG!Eu=8ng zPpq$Oxd~QJr8o9f*S|1y{_M2xuy#2-T8>*iNjX&EXHJZ}VFaPrveJu<=Y&leQ}|rf z>0X|hD_W~*jR!zW8K5IA^>x%^+FUkeWT|@AV)vbE_UaNp_1nZX9bAw$98gjG0GO&j zdiw+FZNWa14w{zpI{H+FOzJuu*2Q&M+lrd`p~j+V)vOtB&i!c9Kw^E*oTnc-xkX5} z)1yFwt;2p&AwMVN$m}$|Z8woTJp{PbMUIZ7PA%tVE}>e@{4LYLeRPzM&s%!VCGpdp zP0`zLj5&}Ujn6I-kz4kDsSHKW?6Ia-V{EmV00YEuk*Z5Zu?>kI)%A{I1so;sCtbIR z70L5aJbYAA(+l>tD7!w(9$s8XnMehE`jqeD1vt1rQ-p{pdbL)%GXwCbh#lwD<6`cO zbRjF8VUli3P>(0)Uv+P&C~eF!Qh@GjL0oIN?^jn`xnE9JwUK*Rr0dqDIe%I;oihpu z)3k=k@7n6NulQAz0Ed5EI3HHM>JJjqGM12c@Ev)5$#~3;G? z;Rx;Fu8}qL#rD%*ribM#+mP{?vPPLN33S4?mtO?c z7m&NE0@Jl7-IQeKYvrH~0AuN6hPGb02Za7HwG7Xtr}~DU>mG;(^`w{0^eiUsd19zg zR^@~4Uae``h99{6bG05S!iqeFmoTmhDP)3|z4j%7_JlN#fb?CCL;J^!@h;0KbNnyQ zS94x{OVoY2w)*)nzciZU*D~GqWO8Dr^Go^<#a|(39u}~)b@!5%x75NGeGSNs*1HHz z*;!ct_TMaM?)c3XH|^+>@g50PPv3{l3NyiA+J@=_nuZgCwZmo&RmGt5qhW)z0^ORk zIoNj30@Q|^`7DE9cq8!*t{`ViEa!>@rFhl?e_lwEV%2YIU5gAM;HW=f({CO9E>nVe{(EAup z5vK2v&#TX(cB(x`)VwZI$r!CtZC@jV`hX42sdmxaGXp!*FY&q_?UkCKS|aVGXZzkB zDpXb}ck-i}uijs%n7r9<8R(*>BGbX&^^z*`KDwIj0#g56HhsU)KPhpL602IQ{TXlh zT0M<_v&LERv~#Lmq7L3!CbYz5V+Fc&sR>Bht#qPTFe+gL7`7AF&czm~H@X%fdf%vo z#0i$#viO6o9S0g*)nJ0-G!}uglhYLS%}JW%lGx*}vS0Qt=0q=LWeV+)H}|K`pv7u> zrNesK)%Ieu-cLWZ)7>HrXe>B3%PTz(==t2_EGdFc>&oHPJVV7i<&~R`a!~Bz3&LyT z+45LSy=!_ZeLz_YH`C)2)5#Vv?vB&-VJNb3$BsDF^P`Ps`S?74enrZYA6jJEV0wx# z9y%k3WOnWh52h1sO3CW0tEWu+>zxj@(AT_voDe6t%`!Li^(5--P1#fkNj}*=_Fw&_ z?iRwRb&qVY8?NvVchcbK)G|IZ)U|WEKs91ML_9y=(jr_Dbeyt?iE0#i)?ll$F{(sS zb2I37Z}$5up4fFvmTsnC7piH`lMH!!bOQXM2H25Tonj=VTTF56a_feO=B}qru&#%R zCWXIj($qs!*|ckK29|5(?55k^suHCm3+B%XRjafebZkwIgMElyl^CEUQWBrux+qBI_< zfWPM6Fvx$>@&}2>Ov$Kw9Ful7^+JAeycSj*Qx%iO-ytFjt%duaoSWxa|N0N-UW}jx ztZJsp>x{s2uK}e8d(VvIPh|&h4M*#5KJa;6NIWlkK|seaUpW^Gy2!2)Vq?kA0WV}+ zl~LcvpL%|Luo0X<=Jhp2w2H$Gv}whbNSLgtH=HY?(pnKE%Q9<-VCF!m5LtuP($xVL z0QQ4@q{NrhH=(~Gn9>q7)yr-#{nHNQFDFrro$MLSbeZaB@MArIW&01_=}&;x59t=# z-El};3riC=eoV;{uJJL6EkN9y8;rsA_^f7ob~AXVzdvF~_f=93dl_>|s8Nl>HEwZO zi0sHD)LZJ4b~7L0j{65r!Ymjk=M zNOJo`)TWaatraeH&IoC*Y8<&BwmZg=sh=fS^3QV{`!^kmpMT+DE}ek9V4+V#tpV%S zX76#Am7wD7d4~qp?WT$BUgJt$-pc4*h2l;KCmC(T%Do`1JO@f^a`rbNW{}8On~QQ_ zRYz!%wHI+NV0xArx}SS^F7qoZ!%;zH4)+8Oo^kyQ(cT-h3SjRP@}PnaoQ4cPx0ZS2 zHi~$l*<43}1lzoo7=;#@m7tDRF>0DS{bLL}~n3vhOFJp_S(#+yUH0{Lk=wZ*5-4S zZ--$fYo>FS+OF@{@YcK4E|<>ScA&V+drl`bsWVlX#5n?3NF(m$V-Q6Anf}^3f%uz1!RLYsDbeqJRQ$gJD6T;Q5%t`n=ap;Z{_cTt`4TLdNU?uPBg(dyQ}-6>CyXWh!c zhn-r6UWT!?2#~GgcyVf{mGthj$F{1ZONHCd)Mf;uOpXtBF6Z6(KOh-@c{C+FRBDNb z&+s$320hKS7HPj&e$RslM!G>pKzkK5_r+^BrNuHnp-Bl_7 zmA3y}8UIwt7fFBCB95lkCjb5If4u5{gxZdr&@HImbx+=cBl2 zx`*1M0Y*yi(TDLCFXVzlL;qpSi+iX?**{9f{)0-v3k~E|S=^LTVU8-wd_PI~PbJAW z8pYHcnRe9GUVl-oK!MK8oBe6%U8P_$U5|$9UEPU#=!c&q3+ti;q(MA@X8KS4z}E`@ zZI(;e9MF5+sy963NiG9geX$ED>ZgQ!>ru=pV@}5C`N@+pdi$2{`%^^=2+`1XD^;qB zX*>lSaa~w_@xQPhSR3P7JQsXACS$xc3&9`+$8qIUAJMd}*U8dM-6=RG}}KljkSPJW+fYaWZE3t=vcpQAKC6?Y#Bxzm>YAJj#D~+5&!G z|NcbyB6re2Uf_P%PYVC7Z^Hj?h(+2ly|#Gle@oXeKFSEdWZJ(~m_Y-SytpQnVZOf- zdv#t!)r~BVb{D-kPYA88; z5;%GG_P4{E51**Wz(R}ujqjIvT9p17_xxWG|74Eu{}u7SHB9*bQ!BPeoHui^FR*E^ z_O=dOBs2*vUs0E6*6p_h1tx)$L04Ui@luEoGl{ z`P-$8<&$cI7Hnh>0^8=G$7LKU7FKjw_+#2lu;qe)NOOn|BR1)Uef9oQLbZL9qbuT+ zw%iwzt7a0&1m^49g<6O8gBJW3X0L{X$Zaw)Ya?>pN@_ZHL8Ie&{iWFMM9HjOSPiT7 znjBS;#z-)PZ<;67y*Da6wd`)bUi-jF>iuY8*0Fvrj zpQ1O~yIj4chdN9O)3e~2R{h|`Q171R;vzoykpaek64JEa;;3C=)wEW#XMsVJYWitl z$4=Lnjs6_iRHWBDKs1m*qME^3(r~z1@-U3%Y@$4vkgzA6pU|gr5)Mn<3t6aaw-quw zkM(i)LO2DHt!C$T)$=;x{YKq{=kWhpoz)Ai7>9P(Ty+6Q>w!mr>A{UV>h9s#=JJ(C zoiezvAU=VM@FTz|N!fYyq;Xq#&?5~at{?Cw?r9<&@5s;;iYQssu`o8{w6$o)nh1%L ziaPIuLCflmL}0_#=OZT9sGBm=TR^((wi8rUZQ7wiugcJWD3djgF~wK{gy3yfXQ;Og z!eRFKQCu(JS`wiO2Xs%3CnuIjC+Addoc z3FhdpFHdN3$~i;xWKl;NPeSk&REi;|^b`g;ChaMS#z)>TX4b4iCp;!{P+T z7$uSOjnQIE_^Mr4VX4b)0c29Vb6vZ8d<@ywg~-6nO#m*LAev2-27lDGeqm(~`Vv+? zg3F!6ZfWJLA86YYSloTQqJGR~ooEih-LvzUIRqSR^9&*Ca;C+?PH*uU2 z(ZThKxtxSWrXr)QXKMxL4~sTT0W*R7x@$F9BhBU25pPLn0ucAidYndxsE`5V-N|ea_kYY{&QgxPR{$ z85x0$yzhF~nrqIvp68isK}dXGebT1X0e;;-x{&x;S5{9^thjS#lIUP2&&qJndp zGRk~fGe6C=yLC#Eh72P{O|U+{Q3BE4lxI{K{DX2vt+SNSWwh&#_Qt732AkGj9``>1 z$V2AM+JNP{8TMR0#};98+8|%>k&wK1yjQ|1tJS;vU6r*Z>3&=-it7U@M=6x3z?grK zxXG(Fc=@KoLgR~Z4x5?9hpC7yMOqKXFCHEUk{yuxw9z!l&XaX(x9lEu0Z&c# zEWNt#1lTZ@G|Jlfv_>Zz?oVfh-S_=GFHF_2Y5O>rXTDVN@z zk(Fs9wGZ3EFRU{Y;A6xC&fUh8lhGzUPk%RMrYW=XUrkX@F3I`Ds^*li_p|pJ6pYxw zs~+mAIS0HBvCO1Q^@v~~>g40SFH-F9Oa`d_&^?5N+Xje#j4XDnoE+}=5~QYrYTL7j zwc9mAED!w_sjX(RGvy@QnE5civ5Tn2#@!CJkj>n~L1H_$OqWH4bcc7ekF4}AA96k8 zHo5V^X+ZOLEla^A>3VCeRxa*+0I}xOTD8%WI&COL!|qym|JagX8C)ug5lAQW9RbkG z8-=6UV%bwlaZ*j4JeB62{Po!l~u2Ha{t3;xk z?ouUGzl9VP;Ej zM(_vpe9B^Ipi{`_r?Xh8wRP%+t3CMV7W);S|5(<)txd||=8h4fWzKm-;`9Rjifg`U zPKa{9q~@iaNy9_{zi-Xl#Rev^%n+ml8R(W(>6F#guc86#*cS_ez7u$HvD88FTdg%1iu3o1ZPbxoUmMi+5KkaM~Xt44%ijZE` zZr`*a_)cNtD%DUCPum+-7dxh;k~-a2!Am}+J;Hrwz~Wirpf<^FN(1TS=>0~t=U`O= zNsE0niF=N0`Gx71zQCgZS}~p#P+bA6ALNMT(=q=|JR9{266Bk8sF!FFi0PQL$aFYO z6+9-RU_^e}cmEuH`%M@uHl&$-&g)ZTJJ0p z9dZfgoPnc~;$DDJSTVyVr>jovJsT#)AALCaI4vh1b&Dd{Ys}EJwX^x4nE_TwZD>JS z8t^G6JnWwd6eJa&$KdRW@y%_q6`-GAzxa%vg2qJ4`I|Y+3T<5_x1QcPTH-XylBY!f zf?DV_G9a(5wNz<0h?;aV*z(J)L2Yfj6Uc%p%~iG{e0Tq{FTiC$iI>Lvt?|+EMco3j z4CQeL^0QXS5tYY-o#WeKnIN0FYi;xjYsg#S$G}&rku72>`~#?SG_ z^CBC*U0J3Fi3c~RMa*JL;q)2H`ASJMb0J+_Kj~hz+EzuBZ6_ZXl40bN&AOaZ(X(3{ zK9&PIFu@5{wNI~~W*Rbh`PBZLrA+Ug?NmU^%+}581lG(ezH%`1ti7v>>uxNq15p8ngn{3jbi4K+EV^1!VI#CGT>r{B1%LJUB zUVYTpPP$?wD%JQn-&iUY8>lh(UDVwjLa`>9rkx`n3-^Z6K__$!~)d%^>1L zlYKONZC(~@V}%*@@YJl|w%;?1azI6{)_J#?3!Os(DCBqZ=Nr zOgHErWr{KAA^V5tg*f5U`_Wm?&ER&Y2>C`n>>|_EB();4Cja5J%ZZ5RE?;?VaUlP* zPsrh)80K1fx4A0NylXMmRTlOgO?&B**;>QVAA4K8-8XZxqbYN8!ndJ8)!uEMIdlj;)T1 z!G*yA@Qgs~W^GU9RiDwhLcQ`P!(keB{YA_AnRhc7{gc55ZuToaLqTPb?34S}=GP(o zt|SF%_!vaVkPx!{hlZGmxL>yM#>Kt7N@Rb%nHQ;Y&9hz9E@?vB`QWJ|`T7tu^FVmq zXY(klTa}?O+B>#&5))-jk7wVBRryYRBck=R3fNK3_y=MmB}9}|Y--Sk8i zOuwat(cTcZO?MXc_;wAmS1B3YIKuFG(@rb}@obTZ%cOEtsLtN5AjAJH4|q>T*Zfe% zuzIY-k3C^I;6$l;;cQr(_gQ&;tII&J>87e+hN`FX7xAqli_;09d#!4HuJ3i%rs+?} zwW$pT4#&stA6n5H6@vtymONc_lp3SII2_-UpDM2I3SE1Y$$ek4lX6Z&0`J8HqYbbJ z;P#Hip+Wpo)X&N$!h@TRzSek&jX-EObZER#VM$Og_&-zd-zXEw3npOkP~5j{883$< z?1x!~R;8y#h%B`8syG5}4EEA0_S;X0w7s*kcDQ_b0&+E4+kXY+1Z z^X{pkQ?(z3`mGOqFQ&ARgWTjJ2Qk^b$+ny|DrcXvb&IM8G-GZ|OkIW4n5rD(gd&g9 z3>nnxS}ar&jbQ;f8G5gv0lu84=2;tz5T>Da~m!syMmziuc=Yu{RbGkt> z4SSljry)V(9IHp)_*mTjv3k$KyKzR@b@ARj6N75Y!S@Xq`~)G$GiLAlNetLMjDe1~ z5nPjbAWh|IZ%0pNK{YRwnr|*6Gv#id*S&OIkQ(t#kybm8xwo>c;8qPk+6|1Qph_O= zb-TMprz;`IMs8E~$srbz*)Xib>KJ6?LPqtTw%Ro>rm*2rtw^J>!-A!GFzkav=UNlH zdk$xFRa1OILTrZrq?BP})lo{6h_R;OfRTvYEVhA!%hU2Pm6W@u2v54M{T<=@1PT&* zit|JWpwnS*AaqB2e0Fv+QH$A>=Xc)Z3k3AKYB=XLr9q=j^~>swrFwYXD`Caza?RSq zQUb@8wc*i1^Fj8e;gS%F_MvuDxtn%=Su^WaJg@EGXZ@zz@maf0?#x@Go>V0ilKGtW zI;q91Opv~ZW0hcGm!Puo#=OABL;`X<*bea$!K$`Cm+Y}^zQ2egj;t%9OQd)}^r#7O zbgWcg`1xMdKV@nV!JyL4I?r7>Lrmp%az)7Z zzr}*Db-%8E(+u34NI+c=HLJ&N`WSA@g_&S3#G55H)HG=8E0$xoArUnrKMF9=BcW*t zSX1}BN$pUiaA_rh+MFG%;Yg8I7_(cnp1$#^C_}5%J{~JbVHcX1{=a$WuQ>%IpL8Tu zZfK)ykXC88!T7~ZK0_ANbyLkgnIi6$(~d16D~fM$8$0$KaOZKM_!uD3rb_P_-`Bc1 zpQZEa&@gVYZ;vl+`V<9C-;zt6hq8*-FV#dHvM4up2g1>khjkLL`O+#BxEbj+WNu_1 zXj#TX@0#YJn51C8rx3f@aMfJ5%x|EuP!HLEgXK5Ka1}7CkUlH_TZCpcbBRm~^af4` zuM~C?J6+WIU{1;Jh4{g<)PwCzz5Nbw$9mOR%BsP>8()28nL>?bRLJeflWe{D*G=}u z^||H&Q?bjG<)I|dLmiA`=3e~Tc%Gq9b*wzHw%Dn0ys4Sp@Cbay({uWH=aYZs)`59W zEAQCik%quOtnC*%q)2eOb4%`(g(~w91eF$Q1qyFiBkrDxu6mx#?t@+`j!=$bE|nw?e_@ue|$*E5xNK zQaZo5qpgwNw%<|#>R24OT@3$7_Ybe|3;+IZiv!j5!M-BTe*26?ARMZWNd3V48@S;L zzCKR&&R?v?NBDd7IpUW#JwWTf>e_$f%fFtHsrVO7huBW7r0*V#FSg#J-1 z_1~ZW@hOYphJfuTdr?j0Kn|tVhJp?O1^B>uy+8f5lL|B$OE30Iw7<4){r$cDZ)X66 zACKTJu6Dq-FIBky>g{J=Qv~fOcbZv4qGF7`@-!KMV(0@9doRPk00_v0o#vI9Dt&!^ zko;zvX5A)cfA75zM0maJg~|lbl%LC%lk-!9^#H?6lSeW50=3?@=`fTXT8le>=H0ZA zqw++&$3aTL%imd&4H5h8{PD)f5C=F^!W;OwQoC3u|Cyf3HOg(U$_tQ;#{0|ww2it9 zKOY|-5qrLi>g4Z*&%VqRHY2QDyu7#ZBM2G&oz>gQSZ%qjUQkHBu&%eCx_6CyEXhca z{6C!P-~5Y3vlOmhf}s@JhpLDCoj+_Jj%{aUJDqZKlk{Zg3a$LE+yU?(F}&4kD7h<}d!U`@4S{ch&RjtXp7p4SF?BVx`}N4;-=hia4y}m(!oc;x3)jV)1*1`xM8!{)D>q z-2H8Adar@IH1#Tr+i$O2^^00RP1lMg`mNDKRmGZm^`B9xB_J_p6R#hsfQzbA%%T280i^N@E$%EIPe=p=2 zt$Tx3fAp_G8f}p}Y+1JrD4?EazFKQ>|Cz?=j1in=rrxPuE`~;bd%QHHTXy@&zf^Ep zKq;_PVOZ#J5Fx{Bl@tLE-0))0GhGsHJw`>n`~Qsd_F)14`@j|e*uCMDf_DZ(b1zqGwV zBZNw?+A4;G?%8AK`@)WC;B_&$!j#44a9*AB;&Z$468!_T#B%i09WD?`v1bND@yi_x zYp#tignuboJ3Qzholy~}+FA=x3pQabB$ay>B#~uv4KI2fYk2~P)eB>h|838%Pm0JZGIdW5O1KOo<0s;wtDgHEF?E;FO zm*ncV);(~0=1nejMs-wwlFL%P0nu4ROn?|Uv!;Dyf4>l&O!reObTvz zC<`rfTf#^g9j((nbP}tv=f?xP)&PvYg&4sza)>{2&MU-fa6tSxI^B1xFn(3n*dq}q zs_Twl|G|1HxUqN~upA?-EO-YzTzRp~cuCX)c>}T447-|T+XG58FqZ@|-2Gnj#&%XU zMc{`{iQe5EMPp(JtCRLs-zF&T(8X4@PKlF28HcZL@Z!bM$bB`Q&Ue@U<^j~>et`0WQ3omm;|y4irB*TuD&7 zuEJOwgCALKJy6GM+$3A|Y~{U-ea}Y@&yyi}`8Dh+UtokXTgp4C6QcFh*UghCQQYoz zF?1rsWw--0O{E@`7Ec@h+Jpr-sG+j3?f3LTk1)eJ{Edmz;&dkrGq+!2-W{tg*>H)4 zUy`6HR0^!B;Ga#z$k+IMa1W#gFcm-0eA`A7@mNR>=U z2~Hx&#fblIQ_;8qFo5_7m7+?l$oY7v#%8Sfk@kXGNavY==gy?*;Qh;4K+%8-&#}T) z8AzCU)k+A1!8#iN6;Y^P#phPF`zjfXb0Mc|sZQ6cwTroCNsYaY3AnLWWS$te`g(Zt zj}VPEeLY(3%}J5i4iAz9qk)Y^Glch z_-S4j`bk)@vaL?B##>VH1F3D?v7ED-9M5u~YXbQDI0t3p1Md(T|e_jMxo%X}4uH09HU#W{^*5RYNcxm^xU{ybqnh9n-m!NIA=iC!c3*GXW-e1Ss%(wWcrz%e>uN7IZcU=(*1Ho;Gz$e|vQUj>R59+Q%fP;$7JV43V8L`ssbRfPdb4v6P(*M+ zJ$w1qK48Aa1SZ;z){rXqN)I_d_aFJn>|N=OD#d z=#eu{FnR$v2v<*hM`}W3%!6;jLSbFDoXQweHL4CtD;{}_l z7DOiyJIBHCIG^uC5*LjEp9tR7xue+ayq@l5klm(JBQD-vZo6fJaURZMSPYVA7sA=p z{;pFX#;~Hv_7>;a9X`~PO{J6NH~>REC8%Y${g{04J}z$4`yaG<&boBJKuZ80=N8$l z_9Wu$Mc}bgm6WL^ifeEu0sk!xznI3bpa(8yUkjou&0$h#A*VfQ*e+`hzLFU{zxjwD z$+2NEOi@_-%0B24ty_`NuiMmCDjPC>h7SSA3%2QG@u!jh9DX++@d5wk)>S^C$<1

1CFI+92yoH^5_(Yqq83}GFO#`a1-7R}jDw80IO&4?a<|W^6`?Z{ zM_Bm-d2=gde{mHZ|9qb-k%iz{M{Sfx8JqH_J0fg}4*SX5I4Ge|%@?~ZN_zQvF*y$n zF&HJ4I8m=?n!nkBTgaFRKCEHXmk?5G?H73SA%KaP4f{QJ`wTZUZr+}wH74@t=m@Zc zZ0WbZ6C_#0xDZtQW>t5LN+*;2jRJ6)mF~4NuvrdtucOZh3|*8bxDbGREe}8xza+^z zIFj|TqbJ}dV;Or3)O??XGh~h8LZihuAt}Q}H*jY(DGNGqDiP8-OMPRtznc-;*OAQO z8K9lHzP2V8T&O)aUS7_WK|0$bgBR1EE=GtgDjZLWRTHc$8onhezM$ChCK6sB2rL!J z{FQKFE|4%riu)R-d_o(G7!BpMonvLBMmNA?YxHHQ62X@hjj=~@W*uQK9P+2*GjWNV zdWXtQtDm3lj%wbV7zTdz`T2=Ie%IX**r6(Dtxcw(fJZwvtnJKUzgW(1j3h28bZVZ= z-IkwdA?4)UV8?h%o3=8Fqc?KmxkoQ^;h_B9&#{g8I>fP|3Fqz7cCG6hDamnxfg}8= zHkFmTwC@n8zDxkzv2isi>$>@w#5cZ)oa5Y_UEN1GRuy^D)Z{7vu)XtrdU?B z3_7EF-?H4JZ3+2x8HEgD=k3->P*l-k8Pwc7qylHg6Dj~nRPIE)ZTsb6TwrvXJS_T8 zNT|qA3JHl5KdNw;Y2q;(Z}Qq+liY4c-oK%1h4*XaCY6q>KyQdEumlkn5Cv}P94vp- zQoRujv`zAdgOLQFE85?}83QJv$kzQAV*<0?*}9WPpjnCq;D`#ip;#!^w(jhSd|;J2QfuZrk3GMqPGUSLA_wnT4J zZ|viem~wSj0(B^M*GWE@k3xs2Prc$N8^KLZr9}^*79ZW4p}LWLl_+9gcBbUQ+$yfu z1x!)+WJm8~@HL62za{Y`y1pfRD}tPL+x?Xqj+$smsn;56yQv5Yfi-uBoTW4-mVDOJ zsS1PgT#K%!_Y_{4z~z|s1?iqCaPh4n9PjCbAT3M@EE4fK`oWfp-{h;(f}Ho0u252O zL7<~mY(;kn@kKVWLQ1^$=i4|1wfiTJfT!ZKmO=Qykn1GGxCkv+ya2h3ml+|};kc5_ zUT9TyomRtC!if2}JP>PF5h3m#vnBDO_P`wqcCZ>7*HUr3lnD*CEo$9>JADk2v*G3D zzI8NwdWj6Yq%vY|i@tVA{t2j}#i%}NySUxyl+SwM3)75Q!)<%Eo*6gVrK8dfI$xr) zFt)xl-xsh{)w%Q@l^O6ujS%(ng*6}k=HKytY-4fOu;1!3<6FxdvnwG2*17kv8zS# z#2s|_gU!w;Do7}vw+Oc_jzoRa^kowa0eH^#vml6%-NpEV+ZZi0kDf`{qP`u0V^bXAuv|S@%+$0uwQk$+^!pvzI4Nx3=q0i){CJ zRBZxsu!j20N`bFc3>jZHN5LxiGQe$hFyr}jeZ|ienx(k4eTg9Yh<-an33Sqq_Xq)l z422>rH9(GuYyIh|m08&-ky|%CpPdz0L5qe~Qo%+0qF{wF(XBXDj`N^msc2hAE16*` ze-i&}^4qT8#Ok)oVUk2&IX4zUAcx~4Efr3jf)uOi?4cnH#PjU$HK#7fRug;t$Fh$E z^ZomTjGKueEX8+Ixt#+2d*oM1Q`tXJl!X@hlgs+xP`HQsoLP|khQ-{qLQya43?Hk< zhSJ<)(~+ebTXE784fsovD5j*0V#>V!;t#?0TO)kqdd5^|xmE1&6y5@OAZHxSH~Bey zI+t&EJsY;22H1>KiOY)Mvgul5#G`hS8tNL-UI^pO1bcGw+Y`aSdP3-0Ny;4O%ff|{ zKs7D+TS-WR?O4&vKK0eYuNL09mJa2|xeLAxaWb&LO9)bv1=KM(5C;Z2$YD7esAmZC zZ7Vq!wh{sk4uix2U0ZXP!e)!OfEhqp5}V4A5+yyr~UPw zo+31YmUNA_qYfnMkAR?&0^~03rlQ<7#|Fgj(4AB45tlXVv1%PW#bA8r{q6Csx68w` zbMs(gPR}MxeUevf@%`oCPRUx>QMXQ&eJEI9NfC3@q20D41UNG}XxJRcOQbq)5+8?3 zp*|O5s{|(RL6UTFm6Q)otnNF~6d43K}dn5q&VpbnnEs3lTb}h&Z@C8Z@ zF(%Brjl#dE;cD?sJ~*}D6`hD4DuB5-ovBrO07l!ut5LYdDOL<+x)2C3a% zoDN6{#H|mnODhvR&Gg%Ae5s-gi@~J|t1|_Yyad12{oN8eumDyD#8pj8fYoc*V(PYq zRZ-(c$j2VxMAnth&v=jiD2`%^e?!W><>n32%uzRes4oc$(7%{7+n*l}m@rI4Am}hM z?p6LY(@*A(w*xro)K9L1lKeLVD$=csIw6r)E8(Q)zS>~_p;~cb`0?2;#gz-#rJv9l zKj>KU+&OPPSZ`iRw~@JjTd2S=IqNhxw!m`V#Pi?` zG_C6h9l9;yl5u8XY&~;O2Tp;!OgM-?Y zS4bX4gt4yi)jRB0C@zLer>(aPd3Un#oKCnP*9C^4iKFgXpxKT#*kqLs!pHlYbIeMS zRIX!Pd(JfH#@(`X;21c!32JLm6sKSuRSvuGeSAN*PWy_i${TH^9{AflU+9TawptNK zF^wzn^&(c|mTjZ!i>6W6DI-foAm{EpZ$p%za=Gy2KwwO%1y9F1g{-w|qUhAUyiv}b@L;Bo1|KgnMax%z+bEW`4SdwL1m1)Q?u}*v8aoQ_8 zu_A@$rpM}EhbNr1O^pQED6+=4xn}d;^lyF*5_DU>SEu#Va!e7ZVk|hKQyS?#VN+z~ z8v}{Df@S)%E;y@<`0VSF$oefvQhuq7F`$p$xHnm1?|2SdX5(k{bPfk~5g=o?hFK>N zgaI$RWo9LmqM8&n*Lx6Mv`!6ctE+fZllYWQ9G+JLCHJ7^J4EQpiymF*y-`+Wq3cri z42$dNFD8kKA90$R84~idm<75rJ?O);dFN?i)u>r!2N#TvW@-DD>gS)$O}z%7Bdvt> z7N=&KNX0!tG(6d)a)~Xoma?oX7eB_&Yp=>fE1w|Bt%>2T$Uxhzi!lz|s>Wl>9mpMx z&t;oWc{>+qRBSeIW8z8C?HdH&$zQ8$e%0(7?7({gBL!>d@~|-ifqlY>EMvGZ5)dZ8 ze2NNVG`H*Oye>g*uU`5Td++}3BZz%(5>J#x-kX|OX*_B{{#Y;Z_(U>g_LsQ;0#WU& zD$=Ae-rQV*pS2U>y}`G;tf(YGG>v+Kq^ z64+4rsnQC~57flmDBP`0ij|xAhZ~7V2eY9!z^L<_s?tJNR?)W=UOS>&ftpumAgKf- z7TEzYlzb**mi&AF-V1=P*}!0+qt;&Q2a`Re*Zcm=BR*43;trA;tUqL7mb0+XMJub0?q>x2+@8%- zQZzo>AOz19ZylRtBDUi6Gy4{ES=*olVQ3p5l6P@n^Pmag<0}J6i~z(kHtk;(9T%SW zo|`v0spELIlYo9X;dKw8m7z);2-}>;et+pDK)?&Ya&WwZEaafQftu8!48!~lx&wT) zCz^nF#eT&xv}42t8V6W34xWvgy}8Mthjrasyj|EXmViMCDPL`~Vp1KOIKC?~j!NQO4*A9}h&zP!8;$A1v{Bu(izNhdb3!XHVv)uq zAYdoQ_B=mz^rtSEkkgsdiNFHLEGRA&YG((`MGkrgWXAZXmTOo~{3 zCb5B>gI;*%&MeAu(3Q9D-F&0MGHYd2@H*{ya$sge^Yag%{bXuygPeJkT#b6~Au<^x zK~3c-FoaPB%%%aG-#wZkSeJqi?0H?y>S6`g)9eITXq(uYVC!g0DyIVaO7usp;>!|F zBo3s7opaSHeZqSeCl)J-@hyX%d)?bP_zbI$d1^Hs1~`Ykysk1`TX|d9X!-hk8_LfU zRbDokdojjuK+>JeR+m2v5GVtSMpjqo^qecqBOmNLBCEw1?GSi!)y~BEW3Bk+H9O%~ zdZSIYI&)`V#SH_km!Nt%LJJDNcI%>eStOKGq;g)A)J#xo!MSZH3;Q&NAiqfDNT24f z6}%EHS@R)Lm+?^(wE|nANIgFFMaVNDQi2=p*jrmv8tHap_3KG|55gGU*; z{SmC6MJyoZXf46^K6<&Z2c-#$DLOn0VLWF#(^jwT^zV~eEoFkF$Z$QTfyR=*`LXhP z;-bMlc5Fpo`UMMtGzIXMa6Ig*VEGNQqo=``4{F&Cx(zz_ZA;0Zd?RsQ=%4mW7axKA z4~AOHY+qn@Bz>SfS~ndy;C zB};7P?bk)ByRA!-jb0SnqE5Yn8r`+*kXZRzNs6DClM%IDwX$Xw{Y>AULQkWCj3DGi z8Fgs@_i10QN13P>Z)s?e+qPlArdT(%b%q)3xDyf7yil#nJXWHMWO71cI3_8@6SFo) zxWaH}R8b|#tEs!wv#j$tuzot$i_);TJd@m60HYYr^u~Lz7EoPU-fF{WeEM{z)hxlm zZ<)t#==inWPJiZbf1DCm)yD=rBhguJ6(6ag)=YcQNtxj8;Cu@G4z#0r;!JwtayBy4 zZ|JmXzdn9tdajvM(o}z zS6|u^?-KSB5k5t1D`x|Bq0honiGaEVtr4+4p!IMk@lgTb0GSBqLNP5N3%$9e^o=p^ z5noYjCn(D50I#qJc{q$q5JI5O&#O#YeF;|8-Cly9u{Pliqnl38rC6rnZ*PzVOA>pO zveIrmpDB|2$f%*yCIR>wlGK^+yenIp{GG$I*?VA2T&qtLQ9$z^N37I-erkQanAa6X zS43SEz;hBn{AvrA$ikxzkKoBZG#l;v$T3|INw7F{su^Ez3(1>iTb#D|z69c>kt-<}sf@yVJGCU}hJioKr+w*6j+$4tZ?Klr3A@KluYJ>>P4q0}ujjJY~T z2cKP8LHThBKQpsTPA{^YeF3FdGz4`KSmj#v+Di+c@Oty6E&O8M z)^<_A;|>El-Fb0nykGimpyC%WqLyl>V;?&xNrz_MK0n~L^9jcEFZIt^*Uvf{X83oF zvY8`MYDs&*W2Xy;+$8e}Ylf;diP#!e$MkWT{us{5FhA>QYZ!D4c(V#~Q_Ucu#Yn4q z^D6A=S0MmUROk8Vb@4*ro1siDmZFAW+lDi~I7aY^#;onav?45j$8Pv5g=FEr_@yQC zK;2DsjQa@3Ff?6gf zKm0yF@laE}q$)+x!PxCK;CaOpZ7n&lX{S=)P3>CUY8ysb^=fkhHi}z{Ck4~0i&mef zO=__pBEAo+#i%7joDGG zl_qN~;DDsEZ_*$YLe3tc+vEY)-`aJc@#5X*3OTg0Clc3+GrJB&%~Nw?DlMorrYyY_1sk}3ijImTR!^)0%LL0U(R{usinxSbXS#(< zfG}%bIZWMSIJ2La?ksRD>t&JvtbK}{;|4bz$xvNW-iI2uEgbiY!R3r4d-`4Ar2Z_l zySj7FH^rWxL0u-w)Jp~GWAQ`Kx9co>*B0c*z2M;P+Uwkhow2?<i*W>cA;B(%yv(<1$f+*n4qu#{ghueZKaOBHB3iWxa67g@Lk7!bX zSl_dQ#mees$%)rFhqib?`qfaw8xBYt>=Xn-SDh#E+n2f)f{AS!mSXWlokuQnG&851e{FqJqq_jA0X+Umc-h`N@>xekfrW7v;luuQ z!%6hKWtzKyPo|~Yc|rIz%@#~Rj}uItdZ$|Xn|QxxBsdricAK9I~WxdU6cv3Lgdbbzz2H zU@(_E={M4Jv{BuR1P=u?v<6*YxLnnBH8XO3b4?3RrIRO_NM%@&g+f6_kwnYr-muYk z9+f_FjcdyE9kL^jshsh2rARK=qd8RHUF;+K#rf7--QW(NzySm6Pu=R>`X$!=`dgo_ zdu6)a-UmjP?_3OB#T%Vr_UKmMT=7fxU87%N*!6$E#2li0O;+mH%Rnp$$NF`;t%3Q_ zu#8ORxM<3mC`$U0sKi}kE5E&3>$QT3dfykvkaAizdbe+Pls`^>M&+alq0FA?r+Yy!rbQ)Sa)#2fJjdwYr|1Q7r_F?UUo_PN=5cF3ZmS_0fH-e#$C+&ket{jEe#cLIZ&D2 zSR{b`ox)Eq3f}zqBsuTceg>}Yst=EsZs2zsd(9;Zo=`mCbk8f$nyPn#PwuAH+)?Yt zt^6iKcIUj{G2yXcCJKw#Ew@bVH*;rK6`>m^u?!NTlmnBR8O~?ys}eZYekoRh_sG4; zOb;Hm(QU+j--D7kq~c4g(H$v0Q}0Szx2yAh`>mDVpX;sd$vm=Raa>|r3iD8wpL@YJ zyf81x_;5)M7Jz-y@eZY_XpCv`Og8rX{7ZCDNz|rWgHz`4DzWG6Z9km!(I2j>iKlgJ zcmRF-_@%x+36=TeDgl+zdmDI-wa#lRJmQ{+EB(ongRlKAwE4s{ofsdWYDQF}sFxpf zN!(R6^8f-s!gV>LJ7D$FGQDEV8-_Q_+KV` z%6=aDKNNjP^UB+NX}1rPGFGZD`y*3KZMpp>pV4mJqD^Jz&EZVaYs%C7K15UDi{MPs z8@!*Yo;=N{Y)L+o|Fk&HyRaPk^Emhr&jQCXezv9>FuTuB{_e3i?-PL4S^b;E>CmGk zpJAPU8|{;zmGC;v-l{H|vEZxoc3|{L-{$)Y;}h7ZPmUb*Nc}s#UPnxbp$^{E@8Q4m?mwob5sILzxf95ryYYnmzcb&q{D)NIQgdoaO1m zXy|H~agqFuT01yzQSz3r>w41Zkccqa0jC9Ot*qzBD8|US@q0#4I-AkttSpH#usNhA zc^W)R=Zg6%x1M&lFK}{H8YK;$Sz8`?umc1z~kX z>7E-^(yY_TLtArSLJwyMWzJxbL*?5Ywy zGr)oTq3a3h#;~rf_MB`0@QW}xgAI^&^USf`TgfNxDw2M&V5%KzC(3~roBlm?1zU@ z4?t6)Tu@e9NBHzy0|eD{JPLRh&t0Wi6pCWT#xu+3vj(xhd%tx3W()V-^k1B1W`60a z@A$zmakzrFXr80bnyTn#F1OiD(qSW+`BctKR8QyAu2GVU`6c=f0^)ofHdG%bXt(Y| ziJbi{4y$KRXNN1Sbp!SWD}Lhh4y)74#L^=!uy0{ z2Fgp$CzDhQB@~N9KLk)cWYVa-^M!80C!*rrH=G76^K)ucW8Iyw16x{2|AxiR?zd>~ z*hlNMCnA$C!%-av*&XJr891!n#n&c-{Y@YCk$EBEb_NzJK5>Gb&}Iba5!1CGGx=nTG?-e=-yUF!@6DXuU9ML=7Nu zDrIrz<_clEe7^vW47V=xJw9=B_)L3GiHnvY`{&4-OvoV}N#Ak!g6no^z10zw@79Bq z=GSyxJf4|8glsA)%Si#Q zy18(dLV2noAIZBPkM*@ypXz3Kn|uyfh~z5!es7y7?tZv1r<=}E9Q8v#Uj8JZbbqQx z`_#Owi7jj0-jrco{0>Vv%~XGjE>?7aX8(Ho!Thq1GF115(v0Oh@d1|ojhao4JMDLO zu+)cs%q1+;)%BObaTpj za_nt}ZW~6x9oXS`iJcGb#Kg!yjo$F#*Gn;+T*vqk4b)02M-mV4#o;bV-wN}2^`*a% zT;~yv#K@cvY3;Tp`H&0VQ{2bqc@Asd|oGia_M7`DFkZi ziQ`)CRlb_ACNH(?*@uxo&U0Gi}hxPxn>^6%;GS7;w^y2YX>E}uGzH`kr# ziHzN>mAzaq4;)1;x+V=TE3HS_(pEb;ZJ6ow0!@z~LPPq@HeGpnyIv;A|qRTdLj$P2tZkf%rF68e?)w!KchIjW4-rd(3 z*VbAOtwOA$8wmudDeZjbVAScd^ zR`0*uigs;(dbl8SJ66t5yPVEZ0Bx&kKw zghp9hHA7jR!)N)sl$Z4@mnEFt&)I%FIRp^RM~KNQZ#AjU`rV|OuD%O*Ub%r7XGCb7h>4V0On~gZ>5Jp@KV9$owcGABTOii4^yM?I5xWhc>X%_SrK#X6tLR39C^iEh`HV~9LfyKKy~{kR*uuj6MbG}`xi z{eJ)blNg`dn^XcH6@d2aRf@WQrZj(KY#CMP9bvJZ!gx?bIdbXAECkx_A)(N zzZ{Jv4X<_-Vq{id?I5HiSYD8qq2$+^oO_c!jfc5}RL$Q-(&tco5T^BVsnqWwM*e`A zR3HQO>l@6TzYE!g*5PEK{LBRtrtABs^?VQ6N-q1oIiqRzy=L>9!5-lb4wjEjE|G`S z`V&vHUyWX;j6Mr3Ju{83jk~sKNowWCX#K+WYsfe&r|p^BRUt|i9{h()e|tH^NbwF8 z+`nB+R{!Z_``+~+PBhlySS zxnq)_NB!Zk{_?)^;A=%QIJ>biA&O!x;zQ%NmXjxU?*z#`xbt^1pG;hz zj|xsTCe_h5-hlSeBL1I_`0Jm2@88IFTIq50eE4@(@t5ZQk!J{4;}X48w_SFpzy9!V zp9gQ717tGI zPTuDa7xdpg5AuCfaXM``W^Svf_^+9frH7x6L2?Pbj=I67QP~Mhe8Ty^&sQv;<+k3> z>eM-A4*A!O)H#F7_hv_+7uW}Ra(1VSESy3ZPJ`B4WqOsb5ckyWf3^R$)is?mBOBj( z!D>Yf&p+3~TfISY9 zi>C*l4AprbzQW*?U>0l{-q{Wn(&%exZ!>X6g<%&60TmwO`fU3WxFu!vGYQebZpOeC zoPv*oEC5&J;E7X)TBR@J*j)ctI9*j$pU}+DBtDQMPLmvcD0qb9l55KSSGhi)HF{nk z$^)lx%23B&`v0Z#U0el$j){rm?u@l?;^s)f3{H@01Hx|UK2;d{0Sd$-c5&Q6z2LYW z^Z#M*J)@f3)~;bi+@Q1|E%YW$dT*hIB1I`Gy@ev6(xe3ly#xtJm7);3peRM@1O!3{ z2~ANzF!Ul2Kzi}L+50^EIeVY8zyIGD&lvo;83VFbR=L-@<~8TMyr=zd(kKJOVu0;C zIkPwVYSLH^_~)QK0B$qCckkILAXs?Qc^%VsPH+xd%yOQ6XXN~_JnL3}5*a+`n!x}f=F?b)NNqrZSZG%Y(jRTuzb z{m=CS+N{25#kVjN{v*NXItGA*R?X`7rHxYgz;11#ri|~-L(5ndx1FkPw)f|eZj00$Bi(OO0KK9cWn;f#b0ZZ{yu2p`Or_c{i=7V6yI)_i{F5xiz8W7m3NEi>~N zSt|=DKZTxWn0h0fbAvyl16KtmA67J4hyE0T2L|%`lzCd1t$Q<~NTDjGoL_N1C;n z522Wk&rEX|{&;^$29_ai!^SED_`7Jp1I;j9@2sVZSrFf=t*lY0P zoLejGb$Nh>SHDu_1W)C41{w#YZ-1pTwStA7%(1Vp+5T$0g@(xMJ$f$dfd(cX_G(zk zt%F}f^UL))KJJtcWfd(G?u{!i=Xsz%0CqC7L^~xc^swKyi%V64@Y&MC4Opih!d_&Y zyFoL@HY_apvByPM?1~>h#?$7z19;_@!8_%F39*S4~bdaXE%BU=s>a@{NnJ5u^|8n`|HW!&imQN7oZ&$b;lb`qV9qr zKP)Gt7Br*$pe)Tl-c8tgfO2qO{lErBwfLSXB)*iS?~)(+v+E*Es>x=fV-aC-5$8@hsglGXpR8($Jh7o(NDxM zAIh-a6aQLDf1Zcojn`V$NU$pxmsor<5VwuJzJEG+w*In)=}Jv!DLj{h;}NhiytcNa z3P(|-*O=G<5m7=PX`GcF%~-n}Je`x@9-*T@0SpaYu6mT37y=*=&gKFF)KAyqQoKf= zZh@f7+`o#VO()OwPha#BDU}M+nOPsS&vhcj=J)TjZ;6}Np7)qhEm?|CtxI#JyATx{ zPKe8kRXr$VKjoLU-gx5awfEKeJ+lW?E!i8+*FLPtx~-4Qb%1;Wy-P9aJAEZetoZ|w zN(8497FK4fx=uku?FyP<`d8!N+Ot`iyfOiShybmF){vbSGaWY3Y5hB18x2bnOSz#N zZEwxaNatdW;Jd@Ow>}>M??>hmZ$Q)nkRMu@H{WYIwuANve%MRz-n|jhsRqi7CE_6`2XfZs!N4DEg&d${e7YE&9dAdA-dFY{#HS)1 z5|v~^{Ol6yqwv;9fAJXpHFZ%UUOfCWq2T%%AWBNxqUHECCjO?E&*{5-B#ljAb?}?C zV;VFSg{Nj_NB?*(Ov7#)Z_?*&v>Md5sU{Di6^GtV?qxq)f9sO1=*vWkFxuv znjWwp?9#E-jhh^+7YwX13a+Eorphk~MwesY@9e7?Lw^g|d!Gy79Fq43DuJ%cwPa_~}^&*#*b60UY4=sIEW$LF_}Cs3Od=(8s;Xpd4>0?Y|%+`{Cd5)88- z8IXgR2DQcoVkU**5Rbi;H^>;fwj{?#0A2oysMGp*G))A(O}?k?QTD z4kjPYkr+M$eFM>m_eCvti8-OkWMf_%`-^qWC3B7zRRKivNr1~V3mB8-s~0BJA1qAg zkOsIJtS6$((6!bYCp_C)Kjc?E{?6!4r61*}O!?glgYK_wb7%`|d~VTwt6lyLiK)e_TE51-rc+EbZ% zHx#Lrwthz^vr!IbiR=u*JDZ*@1@a!QD&fyQdp(AKWu=p^z;?sw2kZocvW<;$g;oc{ zMXhua&IC=WcB zN;O&aHtGXTjl*u5%sJoZkGkQnXQ^ZH-@1>}6@L1C44Ak8VN3zyqkSG<_UCn}M}Z_p z4D%O5@Py!vC!oQAa&OzcfZquA6uA%gsK2Imoy5bXjOjz*E!5l4LW;I%&bcTx&xOn# zApZLE4Eg=RMW5(vnTOP3j^%RmGCvnT{%thpo1rS7@Z_iBSn;fWP~j;1pm>k^)rR=$ zZ-tZ>DK}Z^@84v~vA|3a!eErL8sytU6}BqS(wlLL12tMCX&4E|EJ_7z%vM3$L-MV5 zhLXHX@s%-lPlo2uvX)wGX6_wWLN%8XrkgOW?x`a(7LH`G@r_OQ>~|{mEWi$W8pq#O z-0!|awk0Glbc70t~JyX2&f5e*+_ zHfX$G{Bk0vP>=<=QFOHTtOEPxltt(`^>>0?vAgpjK?Np`d5v%1dE(E-LV#%HZC^&{28-whhz{NV z7L?&nNoL72DUJ)TyF)LJCvnfenShkgQVe6nF{s2o+Bh|v+2p7vTvCB#n)`H87?=+> z8L41?rNoq?oCPCZ*Qua`b4Syo;qWeMqu>WuH*}QnHF4vDI4+#@3L*R=jInJd_tm_T zuh8EkxZPW-1@=!gsQs78N2{Pih1^eFI&ajIdqaMm>^!{k(C4>r?ZGNbmKu!2#0qh+ z?ynWc=}(0sxE3wQo`g&iCc2FRIS#1~33LWCV&^!-Pi&+}kgUaATB!r-3%~Pa0%9!V#@Iz01CC)q! zvwHE4uSj|CL56k0TCXtFU}c`0Jj&_D-WlAz!JpUl_$2TL_tPmri_M6WV-FdWUZsu{ z*pZjeX2)7Xt2i8=qn?QpNAWEI8qJSzYH|$DEDzwZLF%2^_Q^)C>^GS7fV{qUVtifO zpLaXksO5%k0ldea*y3u@3FU=(g;^=@bgq}Mw9C}dh|>-K52()1=T)jx6YA2U^Sj5C zu@*V!xS4&|>?R`rJXoCjO}KB%gy}8n^GQ z#L(Ho02g^>iiX8>aYL~3Ul%hyk^)O^9YhEbu3(2_0<@^LbQmh^LJoSMh&rjyA;MEJ zuE=8;7^2I#fg|BKqbCe%|L9_#LKbsBUW_wP&Z?tP+#S0k$%aa!Gq^YXk+g|)2;TB; zRoZn2PqKN7SaU+iEhngz*eF@1U2?(xL8kNi-@zVLC}@bVq+qQ11?$kGR0UdH{_f5Q z|M@IM%6pP?nbU4qja;$FCl>2K%%zYHzlUeUQq9tM2Xek^U?`r+MTjHOK^@#xrCEPFS7Q#uaSO8~`PMj1yKk z63OJ~!wbX?Z#idP&v|V7D3bGst2fUzwx=6zaXkxAIw1J)jTpa1bd8AjP$Nkr={rRI z3F;Qd|@*O;3TU@A-EWW$qI?nHS;SH)`4DBuYqVUrzM-BU)!@97K0v>k)Et+!_v*IB6( zAPtpKa%=XYkG6hW2!Z&6abh+VI$QnGTB7W;#x7|p34F60(+N@g5Dq4uxm5aiv5{Hj zv8Fob32Iz1vkju<0M#w9cs7;stTu~2?6Q`Nhfu^Uw1P2CA3Z8G?ydI4eufOA2--h{ ztFtLnnm!lCyw9me9Wl5qVHF;3Z zCda28Dyp%)gzfyQZTOS(6$?YqFQvUN+>+PnVK}6zrV|CYAu61s8yK6J6+P4H#Bu z!=yjB{2Hh^m_>03!DI78GDozDklZt&F zpbUZs!$n~M9)u}AP1P9LCeG`4H)ImhEb+o+zFE$KIj=sF-_QW+vAKDD6~!(~ua?gy zSU^SR31j=3nLTx===^yTlZwUf#*~zAVzxA z^`-pH^fv6<4SGK~(_Bt(HDy}Aib*BKq%B;u!%9OF^FXv=K4svzA4|yo-quUy_JoSt zJ?$Bl9N1>bbrE&F*m_j{?{^Kr0reW4-gVuQkEX=DucBa}#Y)Udp1%fwWglaWqZL+MXKz_=r;0vB z#lraxTaf#gbwH0m{MpE$%mBGsQoqFVIM+q2m@~Jm+U%1KREj zt6xzkvxy>qt4;3b)sH=(-_#7rq)BG)V1_8>EKD zur2XNEaSwdQBL@=?Xll5x5~Jmac8hb$4%3 zJAQ+=q(;=*j{fJ)jsS4-Yp+JWc2CBAir6wM@QxkoSuKP!&#oZzp2<`vTY3q*`bbbq zw^MS#ma8R*={;`5+~*?VQ7nL2wCM6r>-ngj+K^rm>4U>DZ^RZqK!19P-uSR#85M8E z^%4own`VqbF7!LFa2!1oD$Ct}yYwwFcx`Ev*b<{4uJA1__wj#faY>nhi1i0 zP!}y9AF|Oo7Br$-SXSe~o1xR4D@e$PO1^J|!yAhY1jO~aGy#OD*Z_N?{Wd$(dX)21 ze}+wyC_=RYVh0>`z=)gh6sJf9lhEgsPC9F4x1h;kNQrz^Bcb(%vM802B{DK^Im_I=%GyKElaG@3SqPj>gg>`WgxE* z(fich%x04x$!b7+X;By2N*W3Z0i7;?m(<9hlrOk2Z2|wp(W6f5pyPwfSgZXcAvax#v@C;KZ*$ZC5tDWCov&GL+Lh7otrKz!Rj8J?ma zH4nfaEYQf3zUX?gLt5s8St&w7FJ)N{F7-xoF6=+c69pWR20VR7RDD!iTc=Rsw70?P z{hsbol)t>f^V5#!8jv@=Pj|Eg% zSGgW6OUKG`x+VBuDC1E?0;n@^R98Fou}e7RYPx_11w@Y{`V{w*Q2;1k*iS&5}uyVxSH15Vz%Fw@$%@{i0~&&hgWnz5@M*T--q#o5GHl zJTBtk%XCa#qb+|=Ye^A@18}lgh<`#%{X?Z<9p{umA@z9C`tZ_ELt5I*9^AIcK7iTH z*6Um$j%40a@lE<24^CByeXg!-R4jG2!{tRQE@mP!^~>#O995T?!5~b?FRb)?H{75> z7Myc?@uT$ey0cUQcvSrMoLqM86|B!nTvJ6k_vBLsMgGZ$W3vN({*(I29PQ z{}4~l3u{_r+VPV>0+Vi@3a#GK(u9Z8!T9-nXLk))k9EIJo4itl^rUdnxDKE7s^HQ@ z?_OIJcbggAU7EpOM^?4OXZVA%QN(D-QEj;B}m69P`w=I>9xOs0N%uAb3}!S;qOUL?KW*Y8CDNX_rTSG zw=p%mOVf_Z`%LH%pRN_LmyBH3p+e#eu;oYgK3ZhvawjR3@QxoX#~WL5?Jd_t_O)?w1uOT-5k zm$=IsNjHrWvX4k+&m|M3^`Avae`wFI>6~Ww;K!t8dVr{}+y|qJ2Cz%ss>TMSI;5Ua z4pr>rUP<|RAl8fu=;$#PUSW(=)n;~>hI9x|Kn~SGg&(70T5*Q9%1o`7pN`4mm}Zli zXBDT5;ZcE>OH2XxdxS^D>*<0*HDH*9Oj{bx5lvT!8MR43dZjTMWjsTMUb3(2Z6FGc zyZnWV_niw>OnofrN(9#u(=4k-qmWBv-p$j>Muc%SZ~Xgc*Yc(4eOlK_b%^hGd&yl? zH;>z>lF*@LScbwT+4Lu62L4UjMOlhT%KePL=d)Fz*OE%?p(Acl)zlt@Otsbbk-jCC8ze}ZE*0<@K24_N(K$Uc$+NN$#Fy4SHu`8_pJ=}$ zh22iK*Wa6T4HqiDi-%FOSOzw{xD>RY_7{?d#ij7By}N0pUzjWs`u@s+_+KP*=;alu z+S2;_FJ8WF|9kBEZ#n!leO2!p>GAs1f5td}JTS$z0{V6)oczEThrTV=s-aVVx77zc zFsElPrfG3ATcE!ca(j5?g<|{mf@NMn=}2D9%mb8{Z}1#wTj2gGex|oQ-AZ#KxG*W zU+dD_;LGBvSW>*7tQRl!c!85qW#EqW#;u@y8`nF%&K;9#+h~@hhmo%MwY8~tPW`h1 zO|Bl0ht^Ggw{qHV%o`6h>t*?o*kJhTRR%Jfn!X%uV`weM2XY1>3xxZW>*`u&+ZqR5 zQq!Rj6|mbX^UQ(PZQeJUt?kdyru46!$`9<=q+`0&ouDy<23{d33}{rC+YzFw*=B<`|xSJM5`4*^{bF zi;;6{L-^L~YD(@L9r}wHz?Lm#_(%QR)Ax67%kwNn!~v8i7YwQWV>NktK}W9+x7x2S zO`hYgM7;pA{!>7OE_U=_6RyC!fquN;y|T+to}4n-`>Ik)i!ASNVV6Ic9Z)%_iPJyv zaoAF}{er_qThfm^40nfLBI&X>0B-!JU*9`-qxjyLv7)#ZuhCJ9n4JtW(2|cj=Qm0Y z%5gjAM8m#1s|^785K-liL`Wb|XC&i4ig4+bI?2@JH=nPfg=X8gNzgJ#T4{R%iWG<0&Wq+!X_$(d&lX#|_7gm)fRU~iz#MMzP07GV z6K|yE6>~EjL)Ff_3m=~7c?jAMPbP8HfUumV5|Ycr9hiBYUxmR(~QWu~4oa6lPWP{ah;HCVKps*DW6xtO^^$z(pFBuhk zFgbH3v&*Xf)r{7!>}~C~;m(*I2xa-Z|onR08iCY@8w6_*2VH(mwqzXFIuvBdNuR$!E&YXsNV zJW1406qt_5Mw>6&Q~h<`O}Pj8g2u@Np`i!BZ@o@0d~T+0j}_S0N>J zAdqK#+QQ65;v1uF%vl&>WvIc@xLklTjwaGzCZ1F`i8Yc?jt8vXe#YnZ>{e2y;#0fx zwI^!EZJ2|Gc(C&dT1iENV#MtGQgfLQ+8g~UXIoTF-y_K0g#J2v4FYil@m=-Bp1>q|~)cl`W7MS37I zfrM3i@ET~=5dAgy4(H`o<%9f8lLx$#<|x@&r+{RJBz*$m5un_O4Fxq%fhbmn>;WN= zo)GyX%vM*G+|KdLuj%DCqXOA-UIjS-d4}!dvd~CY=Q6=Ia0Mv%!7;6$%6seG!}12+ z7C#`-8*9Xo^gmtzOS??!^=&W21ip7BKMWBc+v%V&h)*Q=3Cw?_={f}%G_3yfWKVcW z#nbA{BAHnq&x(%)ZcH`!?S3+yWcI*N^Mz;75vc>7)~H(&_csc}Y*ZV_@xzySi8H9V zwY~uPxQFoU$8JBDhrM!)*of1urX5H%#}X$2iiqMl%i>h*q29#wZ35{O49ObLIhrpn z^cYB&QW-3K>wdqdt#V|f#>wNs)uuTiFr5Zdq!4jlH{P>fdx0-LPw}v@wZwj@_WV6mL)dJfuq^6OB zi4Q&7p)dUA*{{hNoB^uQ>4*p!*tY}tHt;4^2?;%Js9rx$-w#Os7~g63KQyEcBv%3E zpD{e?V2paR-fFt7nt6h_YlaI_;j{uIe_whJoBwUuXmOnLKb$mpW4eaLeK%>M)MGT7 zZfcUG4YI1!OiTLMRSDNkN$ibyQ?V0sVLmT+j502=#b(6v`p~cZaPXn`0B8vDnbm^| zYaKQ|v5iFCS_O%ZBaOI37HJ$nzMz;&fQ)mV@_X!5QMyyj zry;s;f8&NRbvVB)n=QU_x7vkt#%8a24c`EWhdZI}P_J6RDYse3Qhjs{&t^O@LIcAt&y#^uIkZLY|MwwKXPUa=h!Lk$N3%yR5OJIA{ zunhHUYlssQ5wWSVV{5oS#hnXLEV^$WV#>ualGb_LN)u%2{5!gh_?qQ*IcUI@Q6OnF zH`_duxWeWls558%ot>^y&1W7W` zo__XOB#5-D<7gF{d``q5YgXBD1{xp07OOdvfD0tg+^zV_wujo`qea?9rgmEFI`&QJim! zCRx3aAqNU1=UOfbuzPuhxp$K5S_2Y5S&7t@v4W_^4ngVh${&a=?89?uG{pY}S)4;x zynvjk16XB7`4EcGD`QX8ZgN%#vln)&7xvm3>zA%`u5w)>LwZKLL~?QfsqwR#h)v*C z&v>zB$Z$+dg6)26G}t${;w{(hrmZ%vuQKLoy-K_=lOb&mIi}97Wp54NE^HHtKS{+) z@0Hwok^X9PzQ(G%cTWR-C>O2$hM7!}=hyUswDMv-=g*)lfyn|*)GXCK(m{Ywux01w zCumgl(WLpR$X`y=TLu?6QMW~=O?#ihEjE_p9Z2b7^#Gx2UDdM2^9EB8*1A~|H>5*c z3G9VY0*k&RgXqeSil@jvJ<;a0t#-#!n1J_V&h)C*%d_`dGzAGlMR$P8fk-|ZYhl_; zAPp2SCPBh%&q+lY97kul>JLtyi0w6!W9gsIP=$X%ZjAg!sNALu&AeT2u*8miQ8o6- z7VGn+MCl+&hgenPnXwtq=p5Lclx<8J>tOx!Hrd*&uou7LWTS=IjPEUOQ%DC>M+iM{ zJ6VG3g_PgwiVjlAQz2R$U4^w^TKW?xOYC9e@&*J{p<+&>j9hpy`dCHFvfH zga%F7J*|ZZG2OVt98X16Tpq!q{RS(lJX`O~IUIm9G;p0|I&>~Kk%cIwZbDa|xsp#2 zJpC?y!Yxd0IPJ1=ccpd{1P zu_^GWcX{+GVt5De&YjwOWv7mH_pbT!@3&K_yr2A4HG~e>`B3Y*vQ)c`S`GDFO-d_} z;wG}y5XC(k{$(h5a1VEH!u_N4qxZX$mYeQ5j|hWnU$k;|Nda>VQ6Hu5lFbV5oEfR? z!qRA{#I~Q1uoY14H1I^rm2(fl;9vJPzA4UyX9==5Z1+595V4U!$n`3i1{P;KPu~uC z%t%JmQ0G;(U$S1G!C!Vj|60~#4S^w?I)=Dxk`Bgd6@7fK_oZ>H=0ks`eYi7vFB-Hl zU97(nMsj_fq;PtN;+w&uukTapWe^BDm(%XuLjpEYcJ2&f08`(DR>ddEx{_P_a9g9b zqej&?FRmT~2G4`=!z0f*&la5#GUU;FI87Ns(n*t(j6rR?a$s&{^Twc&tm{Jlz{Zt+ z65_KA`#_TI7xzhP2FT1aKFy7eJak}5E)VukH`@nL~Hq8H8yYmzy(+qz4#`cF zsL1V#cFxY!@oAQ2aw7Rzc~Q%0us#z!XeXPN`^HFZkK!id1QWIl%Q-WJOytm+llK9a3YUnx1kd(h2!7b`D;I#b4qy_1JNZd&5Chq&VsJ4Z5rvLjS3F}DB_Ef1i~RRx z^4WzLSqm4RBJ(hw+^Rg{0xOr;N6{K6F+{zAw#-jsAzu;A5p|H7op(49m2lK`XI126 z^AR|rTb*jEE{QbEjzPo@wD=-;(Nn0iY=mL%`&n#cbi6j($ zAA~gp!HlWkF#+;~8yYShpjXtU)4+s9$VY0+ncfFq^sv!bGd8(SHCHjHJYA=pdxPk) zxVLp9pYXnLmmW3M=c3s3bmwVS5sX9ym%R}uRZq3g35&PXwh)KLu#9Vo(9Otk=63l7 zt(#7_H8DoPV3BFxXtZsV)yUvsY0{c?HmL#XhKCyaP7QX$;MD{7k$-YODE$&?{^a5=7vrGN9&FL5Iz1%(=^Tuzw z=6^^ZKGLX~X*^1LqN>N$dZR6t4{Rgp1KRPOAcz#u^yuce`)HVlh2_6HjL&cB;D*H1 zcQ&UIIkiZ&KlDKaqoE^SFn;noKSGwBo(!$vBv{=UMl+cu*k9OhYSsfv+%B{#sbDlY z=N!ORjf+gi*>8u9=aI!}6h$Tubypg)KfYP=O>qy69CDyD;4GKCo*XR)n#4>~C%0F^ zOYu*T{%iqG(O&d6t$Ha3$|p>lsxgkT#hf<|33pdNYtqThbw&rgD6c@wetY8Vp$wfW zNvL}4esBp2`KT-1Vaec=m6&+M?>JENgoIV=_*L2W+%@HD?2*K@Ch30ltqIn3@o zK78?WzNnerA&Q&*49z$Ad$_H@7178ixWveNo0V=ZNACa;lX2aR)JVzoEIDe2-1T-) z2`30UI;k81uOfQ19r6}$2Jn$;dRXF~D^_W^yybu+{V4WJhtRyuW=HIECSmvfg)q5j z5RnI@0u#j9%Hp{3HX`;s>|@{=phiCBXARIGi(*trf~$)UNM=-B72X0}M4V~0bLG*_ zQP96cEidK36b5{^jLAo_+zAbr#4(>h{Dk(cAP$=YqTgT`t7C#ArF2Z-F%<>`wlcHp zf%R~jT2!cGMTB{KJ6Hom+lXZbX?T9YWp*~l04Vr0n}=n?!nd~RNrCwWzg>F$&!lbsyX2? z2gK-u&G;k6#WkC9PkVkoGSs}p;%wnZj(13v`75FyjN>_v2ea`X1`N#OO*zos?(h*h znv#d(^lJx&Ox2-K&?QtE&-m55&o;LAjSfrDWuIi3a0cK;etd zl1vm+=HodQ8O#O>q`WF%a$6{Rez=liPrBvJXrm>f#nnQ0!@JyPbq(UXGE37=!WN+% zpDHs1INhdrJbT1Wt~L|;>-2q0stOPz%8xqTlquUWcE(ewy9?OV$9BQPwVGV`BAWuJ?bXRx9iB|82nbIcZD>29E*+Zx8RN&%8%?wUn!5Fox>G6EkRY| zOY07DV$cVpBFj6`| z+uWCfs1u}W`19~=*-C;lwES=yWCaM#*<*1HWUpOmECLs8Q*S|oB7iD%sBH#=+|sm&i}YWK2+TyZUHh#BOH zJM_7HetNE@g;=zlveTrU17vMKWF+c4J}sZ_XG5$L?t~!dB5}&U2>a}iLM$O%%YDvk7zp)8afZ8D)2#`| zM^Y3(&4lvY@{G4CD%Wd$Rz@s#WVWrM%WgDv-{)t+f)e|Nz)b9ep}MTmWfe%+&N_EJ zucJx)(!HtLu1Z_h1{F(Su=X)B$wX|vd=vKe2f%O@EHk9j z{%b0U=^_K|)^qin_GWK`3>R*os4f*3_Fu*66u$4j+6Z=)5M`hrOz4cm=_JxaOfvfi zg@2}XG{thhbDagR96*p$n|YCx+t*i}`VBQ=E;e#n%+}m}jSo)iPjvy3?2L)R3ZHu$ zMow(fJ}t2c`i0Za`mKHbm>SCvadSt(@$9|fJk$lo&r8-|H+DRZn0_0XWW+E`wRPjx^}-)`(5P_j zmv-^7HNS~!*D55JH>ol5T*9SeA5_15JOA>NkyW9ekFj?~G!;d!qX%2I6>YroozckN z8sWR+)pv4Vhb?_#xXh)*aAu``l*#rpt{95>JGey@o5Er8_Hy_+TI00VKy7wjhc_wj`QEHQ?< z7W7m?ifJeD`j7XSciy=RaI`2^a0Gj?mE^ow zgH4Tnszjz*^l>XjuKmHF&vNGV+)AH4P%2oWXUZg2r-;VSFN?ijF|mV_g8ot-%}18t zSPD2u+@E>p>e1{Kp9j_h_S2HK#c2%Py63iSpFNw--8OSfBWzSwf2ngCkfl~t>0-~dKi(Oj)%RI`&KZ|yz6?`q> zpUdnUpR8?SuSuSNClnB4cHzH=Cw0WV1@NjZmo7-Evc_JzrF$>A&JqOb&$##`;|5V= zPz8Rt%hOIaCRL)2)o3s^PC3LkcP+B0vQ%+zyMTi9&0KRR*z&W&|8q^hZEzxKZ z^9E&90Vpap1|l&@{!!J2*~M(ot+yikI;cofF|vNU*!OUf)ZC)VZeRL)oK$$p=!}AK zHNbJ()wj#@{%Veo8UDD)4?8~z(T)8PtPoqBUgcAY2~U{?+ZQDu6f5;3PaJNG zM=`|bKU78t$M+|}=r4L!MF`Jc6cq3lB^DtrD;jRlc=MC9HI~dBE|lWW5Dz+>noEH1 zt^?et7oP$;0pP-yP0E})2y9Uvy|V?ioz z>~_f$3qtBvAHd^|u2vTpsaYd;b7-sEt6eHc<9iQ(wu||G)h?w}dZ>eqeo_6ihlI#i z&gsG(j(X0=$2*HlDU(*dT|0@gQczoOrOoP+kkccc)au61()tYyn*t^U`}?soVGRzh zb8xIg2iV|tZeZAvdQ!PTp)lvWEj3~oXii@DYTVc*c9Zs#ZR+1R6@EUtbv2GO83F1s z)$aAnGEqi*hi1IAHb8re&Q><_VT)LI@ZC$o#cqbC;C7dT!S5`)?K4-&@8{P!AS8}_ z0Ucf!Q89a6@!J@c4717g&sK#UU;wy`zEWyUcfSbqXWsp7Y8cfW;aVRN%4=+1UO;^| zMwqyM4-NsUi1@ue70m7GS$lE@Bx{#$vUTk0} zGI>o|;}dpqB1YZE0<2*YpWog2GAsS|<4lEhesi=Kn;VM=+-~+3I9-~&PT_c9(lm~z zKg>T97mDmLi6^l#ds;bolX(+B-9ul#3W~?qyb(+6ezcv153Jg~_F3Ayf$O?`wP>!k zxU$g>${(}|#=R$tBRz9vmv684{l>=*k9(;U1VKT5!NvKSujAVh$TyxWgKN6VE_xkv zP-uRDgzM&DPW@Sn!w0h+=NJNf>nJF5zj)lOyc$Ts<<|cY>S;f2oonw%@DF;&`hB5S zF$y-UgWY+)A`3@Pynah9&}3UX*1p3-q{+1J%KN#)Q`r6H@$@IrFHP*_N4j5=_Khb# zB3l`T9k##zYH_I~cWY21c>zb9HrC6U-G5g3`;JsaU2j#v;iCw`??8Rkr1PArC2Wam zjk4s0{d}*ZdWUj3*eubh2rfRT1>=njQT55c9>nA9=Yz~PEXWK5I*%uV5*UP#B2NObxuI5tZsbqci}8mI<`0pIh|JAQMm`R@8{<_ z!VL-ho9CNtXzEJky9ZU!t1p7g(^UQ~hZnx6rmCyOx{6cgKB*A4I%**9Qh4{seb_85dU$XvX({kC4fQoy%MZ=F8=nQ(wuPuV7fp`) z63^F9H6;<8MFR@0P>!-7==4eHGlVC{2TA*clciC-0j2oq_N>I z=h456K7J<;RYL$`yQNKzK=+^B`}@OC5zvr~K*%?%zg}$qtyK%Qi%;T&D+bdX{<*ux z=jJ4|AKd?%B>MNpfN|02OgDAztNO?8N(lfB-HNl7{ky9C&#?(l*9I=g{biC1X8+jT z=V?Ggyqy&<{(1cSxd9WDg-={PpMmcgrR3(~~$s)AC2gdH)|9Qi?bHRqA?|@f>Eh2Qhn~7Ue*y660LxS``DB!Teuw&8a zvBX17%3i;gfY1itQ1uZ%?;uknzp#zlCEBY(8#$#_ z{8g><&b=u-6dw&%{&^p#UQ^ZAV1Tki`5rFk<7jI&QE?*tT-Rq44giR~L!}jZcOKzT zA0*>iHvEtKc!K5P{!I--4Tc@zMl%Oe6fnp?KNInPZwOl^fEam%6nNbJ@oQWH!g6aG zs3Ey#XBWQ%ih=H1PO32Bi^9+|LDMcYiWJ3GE}pl__UCl|{b2}1Y_+8R%f4PxMQ(B{ z@@zqc!fR9PqjW*M)X8HpJS($Hu03H6n)gj_xQ@cdlIM@4&0jalAD@|^+nTeASS$2n z)-x=se5-Z0NUS`uF{wvf>=XiX{Cm59ega@!R6o7I#Z|!7<>g>rc8!kJ!dOF}ElBPk zzq3YOG4;(jWba%Tzd;!-9rLB^4bFdDzHZM{Ydjn+g`4~S!v^esyJRQUco?cZKQ1SCD@Oi#J@o?Z{1=w(|L(9n zHyYrbU%O^o{Le>J3eb)aV;0xHAH;uoR-HWe;Bp)Pp!>&d?r$Ca{Z}5K9Wx1uzcN(+ z{d5VhJr_eymWMvG`Nxw`_q-iP$GHF2z#rq}_5wI7Yps9XX#Oud|Bp@s)Z+sC-X7Y& zlAHf`NK}a@WPk~DYdX6Z_>VKlp9Qp&k}MGMkIhuO0TVdscUt!IA7}9Y7RrCwX#clR z{&RI3N`&w6bh|84-(V1}eZ9x})?pA~V*Y9AKC7Y@?DNJW*2x9(QZf^#Q4uEhxf!Xo zYr|$%RbOt0%!|sntWEj6P^|8gr~1OUG-dZ$S|nL`de!H+|M35@_f=7GE$y~DNPs{f zxVwAM;1Z;fUWa4fzn7IGsAbYdH%BYiVnfuuK8 zQ3z#sKYp1ZiHQQ|s!>~axKbCLB~fsVvmuftAQJF?RIK$ z>5xCa&|QcqKq3X6y!(Jiza%0dix2YTdpvt^PNKlydE_U{#R7Sm%k`&!x6KgSzgA_* z2^Ku&?aHio%RCf)=qVk`tw^_$phK6vRxj1D;W8JoQxX;&G;3?enyn~)G&u(`-v!70b}N@KdAfYje5#Z{+amaN|LJL{Tsf*Qnm>{J~rg|n9H zsm@`WD*UuD2;MnF1lL>R?>9)06ARslF+;)fhZpj~pOENk?JyH8uZCWwX=9d6JX~<6 zkycDBOb!fs&o99vL04XkGc6(p=WDcb4E|J1vHDanT&lO*08k zweYje^tBmV+kjq*=Fr=%ZeF{R7Mu5Yk(pNo{tDpgOOWDxsi?jYAaVeY0wkeI9#wDH zm;tHq-kKPS09UWmnW5)qU|t=+Qv&4;@f^3VLj1dGC|3STdm5;P2vdGk7ZL4n6ZX-0 zV;8EBB?xKs7a0vc9$V&QjE|`f3sIXJ%lc{v>+;C<-;+^VC(hg#=vj z8@Q(atJ7VfGzTw#VhxHg%o#=Shrb|uV8yJh~N4A5I#{n6evo_Q~Wo`@!v;@#F%L)R5%K! zhP@65NYsv>_A{hXoX-oQK&x7r!P7}E(a4Q8bbS+|2(&X%_62c`qbs3STV@BdxkJG> zUp)k&nW-6X&O}me>(opT!!eHhI9J>7UpxBk%^x@$qqF>SF82wIA`%`5z9{sKL81Q; zPBT1Vzn9A!9Pdkpluu;f1zfU-6CnyG&&=C6|qG~&g8i^m|vof%GEo!bCW&5)?J za`#L3c9v=A9(s-;H(f#cBF^`!c=LRwJ&DOY<)tMC{ze4#pBZ2b55+>UyAtxr!o(!k z!s7BvS9(OOi77UD8)QINhlsB)n*8DOp}&M;K=hnNvap zj314K@!me1r8=9ci@e1$Sx&YEEyrvXvFs<1sssKx_>Bc4_kH3hJzxU@CuZyyYfIo+ z%9B;)BZ;_ni`4>+6a+HdiA6_0&G{;s`8ZPye-%uoX+6@d_F^Enfs*=k60!T{J%IUnJXzAy9QqIwPCfzD z|FCx8a%4I);ybw%=|`7IiX6`4NqUlt@D6CEmNgT95)@wQNzM-x@j7D?ucAwK-8C(U z8eFfM<***BpF@hUar|jljJ@0Js>BSf)1Z0do%3JB|=Jd@6L=IdAH5z;^g zUuDCsFEZK?y~|8jvB-~ytFcJg z=YR?0BB60E@p-RHb3=s`9C1>QZ#hjbOIcHp;qWb@DrIUt!=&$^WUv~eAhM<-(RPd0X5$gDED&=K++qEed4^pQ&N8W@$Z?8biKgJs*7L1xlwWF`cJZ3$om*B}PSh z2U=VAbn36O@C%^AaZh&ktYtO0%mSJPm%P=B_as(;t2th@#Mb9-EbrCv-h(PF_SrzG z!Q30>Qi%|TsPaXdB;jk&3tzW>mM`~r@uzN+ljO77)j4+$elRZqT=kLD3x0+8)4+nxy3hCVz`5*nTqywy;{8;41Ynaq z3q%dUa#ZiL!F0Dx*^%4M`1mgdHZo~*a{nrAmeO=C=jrg_@!Jxzbeo6~LW`s+F-!`_`+0BCna;#_simMKcO zVZ7A29y&(uVUgMt<1t-#=Ju;v$oeMFu>**|Mv~*E_UM%JjC7)=YPNY;YSL9OOa_4Px^fBx_o) zySnpNtaE;8Z=J>dJjNs%M)H$toFi*kSD7#@yp|_?ra;GXy`U9WQrB=WiLH|GI;w7a zi_9`9vl^zs=mNg z&+Y5wRNAbm_pMxlz&n8*<^5LmH?=Bm`*E@g!OYuG_!)g8pe-oqaJrz4)cwqXn12h4 z*!>Wp>2y@K%3h7KL?lYjN(&FA-qmxqDIR)Z4cez;p5u3i_QfI1mqXF&Qph*1J%_>z zV2cj_bGG{*_b^JhtY(85gg~P@;k)^4q@zqsOxsmsx94=Le%sp!_m_c2^w7t4iPC4X zk}fb}%#szmr0$Ahnw>G!ZLXbn(PXkT%MNJwCcYGOSnX;nK3=>vn?WdE6?gb`_RDRj$8lQAVY+M}^vM&8Dy?lh>if zF!jTYb$xqZK)k4)}}g-a$QH` zo9-?gdw`e$kgoE|lnPexNQE$2o*C~!Wwlt%P~%iRQb~u&>3Q9pUdW7|O@1MqDs3<; zJ}#rM^7RYqgM{AuS=+iOSaMU(Lkg!^T)!eSpWKcv)?%Ooyv_KB>U97eMde0*3SmX7 z9sFn&7e*o3ujb`MQkyQ<>A<=0(Nn;I$+O>G!w2;HEbk)HYLt*i+Y)r+gT{hHRsBxK z?R`_XJ4Dmz-qm9a^VtUcC2Vg*w^_%}hgit&WHz_N?2;niry<6D{B9eq)9*J@3fMrH zGee>5Ec$vGs zK>aESC=q(2p<7*id!<@?Zn%}leuI^@voNX1_D(SO7yD>UIOG1ybC%TCMJd!(>uxR8 zTUhCL${WKs;@@IqG7mri?$XBbGO`pOo@|=FY62xSCh00~Sm(>IP!U)3dUnD?jrY`l4nZo;qTq5yL zULpiX$~)VA1@&ev(W$B;)uv`}x<)63BP=vCoOtazL^| zXe4k#uYdul-0^06&JkC$_6bUd!vd(gd))v|JYdZN!h__!xQ+Z)2_?$E<)w_6b zaXxSWIkykb>qCcJPfgmE(c4!e>6c$cvJkr!kp|JPPs|*Sgw@Rt)h!xxez&Do>Ni%p z%|5J--41YxKm(AaRw0%Z5pGwDgYe4geFh0(;9Yi{K|9$~Q_EqyYoL8Rd<0fVU3zIl zf>1P9=H;vYevNa#cF|0{JsJ!(?9AD{vn%C)2W2C~U2Frm5JbdEl-e|<7Uca41X|RH z^-Bg`)y!eDhY6Dq;*f6FKX~jXtZ99KouRrj!?emHJYz!@>gk4&8s4;tmIh zZQBkU^zHQ8-cHbhH(L1Jo^7Y~0`OQZs}<_@M9#r2_fT+)^?T_|=LC7t8bs$OJNE}) z@yq_&T*Ds5rI6F^uNd<|_8Lh0mBSs7I&iMRW%qDh?Q0vagR+}DUyWH|QpFlw0rtv! z`_l)P%BXjRiy``N>*z34n23Gu$L0f#T=#DMD;~HT$x!^%1`o@&$!mZ{;;{_SS+X>Q z_vG0STl>Kh`YakTlcD?2GyWM7O)Wf9wJh(0M&|XFA@+-aeD>L7eJTMn=vlY(!Ow`^ zS&p{GzJZfU7G51U&fznLENnB-kVAipT;WK{jamZlasDgfcP>bRb|1h=#D)U^Mev!} z+k+*02bx_|=t;y8xSMCdZ%eKwbl|3=->_MtbOvwkHLaxF6Qm`tfXyvEpHWrjcc6y5mgqy z(C0jMbJ^DfFuIbyEYTKP-tw>9iwM-;ufKc-U9+92sczpr=Ze8~y$pieqeOcBL(E1@ zCSSHnQkW7C89x>$Le@GI=Zh1ndT1~9xdxTGa^H*24uVmP0mk5uU;g6BW9^vFn+;9o z{rn0uP4%nl$B%F{p^t6WS3?IWzOq*%U**qOLC+*CBKiST-V3*^(Ua-wC0`H%dO$G5Kkqcu%zeX>&Ej$yX4acmU_z{&%9(> zqwF;{t49%pN+MssM&KDG@5sBMd=#?uw`Q;-CkV5@J`P^CUw|DE(0%K2rek7iO6dzB zcqAFrZcfq2c|A7cqrJuapmbkXJKypbMwI__dhnSyo!9lF#_9F#TSa zC}O~)hP~h89yekot94|+rtZz^D$eSgix_j2sw^mxDmz#D(6vdqK^ zntqNiJgYG3u=9orn~V_3d`9^FS_!A47>KE^t8NtMzkqQO`KE=Mm;W*{Z?gH>bLszl zPG<+?mbD?){dEd=aGRFtW}OaD8Dlwh#r3P2^K{EiDF?JZ9OC($*zPJR&Cn-4X}T$t z=nOQ-OGmei5FcelxSXmky6}atrn#+wQ`Q%Iab2(jqs&aLFAtv~y_9GWK}5wq^#j7u z=P5>!aO%|8L4hQeAJX0{pAHVVV&M*6V zyH=qM08u)s!UbpU-)trgV2#g(jF2IWq1LMJPN_^Eo}!+v?+}{+K?i{k2k>)nN0qas zk1*7t&Nt*@WNbZKUzPc6k=M_o8JTN?Zn^PBTH+%@@yR@@C};zc``YP}C(C=6nKS>< z-v0{s{u_dc{c?;Bdti>b!pdKH{WD z&uHLMJ)oI+#xI>@N4-KHrL3JswG?ge zjT|m_T@NOXH#hr~et&@NJXovJYn#YAN`AOtDOgb%f&61s_?%=SD}7JRUFC9NY@5yn z8Mk9xuy3k?3eF4weH=nbt|4*!RrWj zWO=EWhu|;NbX2d#mx%%jS5=T_zztqQmP$A!9sGhA)QTf7h6a6c`K6A4R>nOe9oObG z6i4NBV7g^)5=$y&Gi|V#`3Ig6g35PL=DinHhC0^HIGl_l$33}d!S;qjw7( zm@cf3S|^?;y1@$}l)7>bG6@YQFZBE#uVwr%$UrSCnZ-}UL*6mdE?{|m{ij978n2<{ z^e(%O`Gz>6-u)1xJxvU0lj5Zc(Nk7^=Q{_&0iAPpl%(v%tI3USuPMkLuQOFWV)z~D zj;x2ZD7Bpz4Xa^JQdyFHgBT`XP@1Qm;p3e4REec!M>^kLVG=ejJgM)l9llQ5%MOx% z>iaH=PxYg@$8DWjba2x`@I4tpxX9v&ky2(SJjiQIV}$%+w+mW%jyM-pkQFt%xlDz5 zoe{93&YYREeAm7(;k}%bknB>j{-Xnxye(|%86wrKcWt;i8K)!Jf;xLXfpz+dRn9<} zCeupSw z=^{*PW{f<~xTj8cajefX;`x%s?-`>X59cesq{TF^F7t~kln{6GTv8BKn9s>woX4SW z3%UDJ2qDH|$cnQX!yE|Pd#U36RPL_FO*yg8hLUm>;(6HRX?v3 ztKr1=>O@5ZH+;vLn)fwAC)D#qt~cW(pznX7eEaPZD|u6IyN2<0<1lL%&o67m{Z^4u z!J5K?!LLw|oA5bTcDCt2K|!qfr0(Ov5J*sT*KMZr=Z``bRCil9ZN??8?zjXaT#=7~ zIj>wd3*R`h?RC&BJY5am$jA%Qn4_Cn#ANt48t%m`AWB^}1G_qJEPo+B4DD!Sgq-f+ zA|eTn>TvIs-%XM|tSR+moX>AUIAol#aWY1ul8M69O9(`Fb2-W8$|bP`j(AfujiR9c8SF)RWI%j->D+sJfHMG;sne;5Vem(u(!~g8CSOoG#cj-{pT4q4G zx`(bq8ZvNq&@42@Ncf@wV=&8ypicjo%Geb}+T;PP`J`|&8H`PP<6E1nQzuAo_G5&9R<>@1UfV+k9VpTu5Ug%!PXG z!GKY88XOSoaYMgrG>`$PSYAN=>f zAh6$?AB8(eEM~NS%SQj5pT6aCq6GX6b^VWKA1K9C#>usZD6XWO<;5y~qDP9LN94aybXF1KzY$g>km< z{E#bZxzZ*h_551l?-uiK7We#BJfJC)>d8ph#aBOlAlA# zz{}0O0vZ*WY}bW}B8Uv1(g7~xdl=g)sBsM=T?R_P|6 zFuJPSdaH{c(iZ$E%wGA^Ljv3sSAvP{#xCCSe8`Vs%sBY?r9@kmyA%hv^n82Nx;Z|9 z3jU8@$OQ*Z*y~~}xcGu2KaMa}3mE-ejE9R$fGFGXQ7=?BMa=4Qel#_lu1yzq+>GHI3Z-rZK5t#lE$uXF!zWPgi+E7e%_ zs@ijE_CbMZ4tlU1Vk&YeB3qBs4es;qHw+F?mLb9F9ZC|5Oj1A=C$876-!AO zGeL>IkE2)ov2zZz*!8LcT1{_oD>lMRmjC#YKUy$<6wWT0#jjKTDH8k+@olf9 zKj#>Er>R7T{JEiISk~fwIkflZH2uHB@=v4pAJ*a#W_|$+pEI;}vBR-{u+(p`y16h7wQVF<+rB>M$uTz+G- z+#Xe5-`U=-rSo1U3SUw5tMRK+hv>BEiR~dDMCnmJRaI2PUd510*=DH13IZ*5sNJ8_ z0v~t23~0yfDJlKpc=e-KffN0?G2m|AO4Uz0Y!9Zuhj4uqG3NI)vu@s-@>oo*9P|B> zx$2STjSm$(qsWv{l-$&#tZ^>A-)(WliUQ_#3Ff;niON~ncK2v9;c%FoA_j)Y4Mn5t{?FQv zDk=f6eONv)xz5zto4U5gvd7TyvrmsL!=4Odp6FRg;{zs8d)G^H+?8x3vs@i=qYqnT z8;a*Dp9}dvZ(w3%_XW~ZdW$CZURLLEV+niX@Qdn(4lPRWCpJrbthBUc%JIPo!6@}d z#$a`a#8sWY#R|D8WP)f=9e2C1^s`pGv=e54ILV9RIx|orT|MBYP5JwvWyTD|(FmBh zEfrvGn-65c7gVTV%Z9?f$SN9-2z6@n0T~lA&dd<%X9tmAX>V{bnt4elqpm64Srw0k z7>G+7 zwf?k@+4l4~ob%gf!2nI<=_oTe)Sg}iku(rLkWM!KwG@s3xyyKPY<3C$InmfA~!4WXoQ>yjEs!+utVl$S_JkAaMNmv9A)0t z>Ic@kwX>%SE-YhT74+q`&b7MH0bX!dCiK6|=hh;qSl)u8i(mDy^>*-}M4wG!IUe85 zQT@c(QP?st9ygY0YD@C7Z(*?R-<^lp(l*AIu;$2Va@U1xpL>O7vG$hCCAwfrU$>jMpJL8ebwpfsS>X#A{DkdKj2pC zs0E!TddFnFLG;vVvvJMZ9#DKva8l-t>DqM6+ZUxe2>3m3J9NWle6s_evPYCu%^B~A z!FG$`p9&OLVQjY8bPB0?8MU)TaTq_jpLnNK{iiWpI$1$O3(H(2f*$~v9{NcOMAHch^(3ctI&qWrBBvQ=xviBU#@+~zB5>_`p#<2;x1;_$i}c&)M=haDJ3b@8TfX4^DvotM*kgGnP zp174wBOFr=uE!tvCa=WRZ!_#`PHqicX(_vKGeW{Su(@R?CJ?<<(}z?`YJbk&{SqH! z-=Eb){l!{O=xlY2aQr(=`r!!!P`oi|TE*Gf;@I%hkS!Q}Z_kHo`kdzXF~slCySuw@ zdfv5W+h(+~1m?IjK51sApVmnp`;lCcjDW+`rk&iDWG2t(rAhEMs1|~fUC%sF+#aYV zhl$vQJaL_p6yMg7@iw)vzj}iw3>{Z0;_@e{bQ*w56U!(2X*(Mduad3ZYQ^7n(!U8+ zap_~kT2U4V{+chiC!QWj50w0zo6Ktd8gI8~a9JP{q2vuE-iK3a5{M^Lgg&|~jsHSS zH@7`#$$h9Jvu#LfT0ST?z2x2OjueSveR^(k)g#5)9glY3W_GCRF_55(1)$2F#FFv; zwEa851`E5B5Z^^6vMCjl_SXEgHm9qE$V(j74jWOHxA6B$U6~o3DvzGHdrjB)F{^Bk z-+-OlrMTS1tpaT5ykd}ig8D4Lf(Omsez0w-Q1v*4F7T1p;JN^CO! zY&<`{$~&#UW+5wdBoB@hoB$D%S3ktiGBdQk6wDCUhVtz8Qav?3=!-vAkrI$JwfB8N z)3OhDj~c1cxy7XzE-+y#Qc*S4V28>B1+k`xfkX zU}{{sTc(O5`UV4oxzk#|<`}FQ)aH}q$FiK?vk(!K7d6T%dAH?McZPxrioNqlza=f= zobq@4i+?oVI3FoQZWXqKCnSuxN@c+Hw=|Sb1A`o2Yo5=N+9>GhkrEOTG%F2Wz=(5? zEiyA6i+K6?2t;o>Fy7$eetmkp*VjX0%V?Z$JgS*-rpbD`5FT`{lBr(M%1wz;s9Q=s zJzGE|VBB6K)#K_=0jC^JM_k4c=8br;2kMwjSRh2;uOXbi_h~GiWn)Oit(V*=+d2Gh z(o%+REmMNC0+PVW{qE<;r+Fh!!iSC)Lm0iHc*#fe!3QO^69qrEpm)~^$0iO$8FWvz z2kh)7stHSFQ(v2r8WD0d4)#v(JyF4sp`$j&Ew=jnBG@%~UfrrT5l6~pq|o8ugyK6N z@a)Y#PUH)TU$rsN$%tA8FWO0}4_~PtAU|Jjm*(HqrBLY+f)htvSlt*fQ0c;z)jSBW z?@H8kBAOdID^2R;Mb^OldsTQ2CFs0>w!x zC2qneB^s>P&L^Mulx+FUFe2(A7r#s8NHsW-nIEZOK2ClZZ__KCjr?{#YcV-6CDU2w z?VWB8BklZHEutlakFWLdV7wU(b9(GoCFbj}j+%FZJ9)10*ZrKn}^JxEFfh@uozDem`+ATUL*o zKJmNr2A`yGo*Xk2*5hTlTP0L`IMby;Q0(;+6Um6H4*>GSkI`AWR;krS{jt@Xc5M?R z*DSB}!`%{Jp!v7Tq=h`3%hUv1+O<8pb#-?e zwts$Mp-9R~Ae}3#f*LyI@|IW6hli=d~g!4mL6hG$gDx>TI%b4 z@Lhu>Q7?P>yYq{DQAQ5P_8N|fEYU<_o}B)%l)b)*TjzY=guQ=m$72ZfmLDy{oyyrH z>CZ`I>mo$iNe)5R7kENfZ=}&tCAN4=HY|sCBk#E*0@PLVNa&RaowpjxxDmY*dt^3y zoXrJ?!xA3a5;VW_5*xyYP~L7*fx`Lc*r}Pinr(%sehrtXi>qkSwKk%pRcrJ=>`V2Q zzfY%Q7~uCz%Yq?EqsN3M*-d@6tKgAJgD2@&a$mH`msB>I>9aWko%6%AZgQ8Kv)>NW zE9!^BjIz~Zni1W^IqX)MY`#C4m}^@PcDxrAGAckj+&_@{R23%$CSjCMG*-JKfvPW^ zZOSWCy$8*_i3{9h=IVNy`Gh=^emdmnse%7sADhx}^%%t#m=oVWBwaov`|Ax?nztkg zM_JXYC9mk(^SD?c;1YI2bQoFi&9ByNW0h8*`Q?tL&ToyB>GorakXG zf|RkH2CFOwvvw`b2<2accbY3y3_UdFp|lpf6W`00jn|YdedwaWBg__8zk|CMSQe3= z*|Fq|Hw7<16>U%2(Be`dVdj7;`{h<-WaOQ(4?`UovfY`@`~+i*vEOgn9nxxtzh@;; zP;&JQEltSCZL!Dl+Scc$_EU|BTz_*WJ~}eGtrC6#e+QtH0_&@9X;2l&;5+pw{z^~5 zJ{W$dA@kWky)mpxJkLsDvsFSw5cb4Xd+uPuCbUYq)K?GOZ_spfB%H7;n`YUBai#)qw*j zc~&*4l12l3kF3%wWk|x|XIAia72P6Gbm~gIHE1Iv_(?9V{B%~rCot(J82~aNsdj(z z4{cBzagC3Cxo;j+>uST{bt$|u@ZGT8Lr>Xp1an_DHl(P=ok56MHD!yT2l#pS$xo3i$!t|0X zuUl{_C|SiZ^p$?#jcO+oHwM4=mVsxpJ+K)lfS&lbg3t5tUf&SSSgo~&BmiK%Igrpd zF!1YNs`cku&Q!4SM4Q9vudiD;Eo%cT{*2u?IBMI0ZMT1MmO`ZTr{-C~+T3ubSVC&} zIJI7Id_yrOM;`(mj%Y`We;0r?8cYcJXLF6 zC@M|fw$bua5MRANMs;^}Khc?)d5%sGB!@zgzf>GWsT?SQt$tKxqfr|nuPz9%7FOtS zrJRpda{T0+!f38vE|t%AL$*i>-D#;DxgT59VfKBnv3aoNw{oQmprm5hgVTQ8?q&H! zHfAkW$!CSRO|!O=cQ$FI>OYM-&Jn#-*!Gi}+Wb4-r@+zldIx^@kN96N?vT1@wOAeo zsva|Py=3{>9YB*Ho}a?Ot43j3x2t-<;p}%3B(;UDe0QIg1sBYOE%_9xalfajeKiW> zmqdUZb^QE+YUr@;!FGz%BssBdY@ERWM-azu5supb7OVVhkmVfq@HQEJ+523F3vZS{=JIQ z4j+*Cz(v$|PWw^V5H^d8aKume|G)D9{Sla_}D%Y}|fk(A+;I541;O)7qRJZHp`nmQc!#@ZefUc=R?`c8GSlM; zbS*}U)mC(8@OmxZE0Tj8;u02u)@w{v%sMu=@u(DLW{b!2{%~p z^3@9~m;RiVbNEs>5WTiENqd!xXkzU%rC`JZEb9`{vaaoASx;po=j;+>^Wj}eHaJIzzQ3vxfnO(&F(kZV zsg=fILb(xzv+L2`nAp^5Ub>ny5$zDQ0j6voLp2d5e+n}1GO9QsMy!3YOO9sDtn%uJ z@aV+m=hw%}(0hp(B{)nj36>4F{lHQW5>e&2(5GXYcS|oBd5|12SwdH`4|a zdB>FzHUjNgPDg|tj%x@oKk9bF_OJkjfz0&$6=mXQXC(5g^7yW};}SfGqajzO!@yBg z1@Bqkd#96k^x@Mk0uz_6*)s7FpU8pVob>@-xO?Gmg&~v|cl)=xwU`Xs-dh#rk`E8H zU^-J%Bh%Eo9cX9JA)MuMtJ|Pq?#b=Cbfm`bU$MRhp}8MD35>7dXf21v!objece#&= zgYyMw-+~J(piB$#-*d63sb`EArq?h;^ujc3#*il!V)VATYHu6ZaKB%S zZ->}aTz=z|WFp_gj;N_wFsm=V%(n8zo9nSwa#%pzHAnFBGE>-}B6im*FbebhjF-Q@{F&VfrH_n)DHp`zA8l=EN1H`A%Rcp2$eHq}3g|*JmQ<^El2JZ2R z`qM)q63h^sSk2dAN36Fa1Sip-zD4!>{FSZUQtkQ-Au za^ojb|9O5^;MF249sKyZx~#}XY0 z%WdT(l_0Iwwqx9CcjT`+HrE!l?>3u@)o=f{J7NBdSc$B(?L-rE^T*oFTMYjjcup=Z z9(gHOy0xt52XhiZH#C?^7U!>DzkJ971hO2j4(3w7=FER2B_#Aj)MVUR)x2~4+7EL691G1}_Ty%bt~_wc+c} z7Q~tE&NI0l@^r601W+Rq%D?9j<7eXtEF-_1&E$J2fAPSdW?i*ytYvQ|sz&M9_t6B$ zZi(k2jUzc%L}@C=1WNQli7QWdrTL;@2|}j)AkJzO-@6P!%XrVBlJ2)*!uRD;=+y2I zZPnwz&pt8T`l~zB8q4tykPftKPt<3Sj$uSABc@?3f6noxDc0V*81C+I@NU2q6EysO zp!*H(G81briKEFHT4L?q2ZYvY`@;%#^+NXsO z0V$Qno6?!xyOzDq>y)IWw<*6b3_Z{}lr7V0w$uDzLA^d+j!8`=Vh~qBq~-R5G2eOI zAJz@~v`XJy>;}ok(XGP7&nCfQ_uA!Z=ek1nC3f~DTp zPi9ZnNi(GQv&SY9(IsG!u>9ncl)HaqoE+L4`(ImZ2Ka_l+jX=fRZ|+qy*(O_*17!) zY@ES^WlUrq`?^NETWF|88aWG2S9+KCf^W~NYDdt%d)H$LjgWN@oEjn%Gi04IJE~$c zcP+_EN|i(=h&aBGYgIlAM_`NtweKO~_j%Ar#{q+t6eS0SBx#<;Cg~BEo776g??G1f zL|C-;s-pIf$dXe^rMUy0$-PbvHPRL9rImhcgzDb?$@Z7mEO&fqJjS)X=s$Kc;NNnD zVMiABV~@b)_gRIUBU zPdXp}oE!#jNXejbw%tWHd7WqjjF{^OsW^Pd;xa$Q>tz}YXLZe^U|f2GBenK;z68d{ zQQOb(YPS;AeyR?gPOKth)wITbIgB3hDOq-MNN{6VKa|v89nUZNM{6f%Zd?@bP=Jw1 zRqw6ihx1OHJP)0jYKXb!GXCkS7H%mB*dsnEU-wz%#oDImw<$rq=k!PKQOGw(YTzKo z0~i@e#OaDz6S4xI8-=!4+!_M!ICEWg3_zdIXC9YS28?*&w3s~WWpFL7QS`=!`Tq{f zeheeK*nv_7#kzGHT{>WDf7#{g6~jyl84(s=V9f1u&a zkHGW?1#1o`U%Yr>mN|%ta`2ACal#>B$s?1mtnc17P)3zL7Szkk@p+mwtw!t`uPk@jDfR5gK zc0rJ4oU}V01cUrMsUt2I16{j-K>85&JLBzcHir!SZ3#I7l@6fj`)3JBx!9sem23uV zV`&pP(Y!IrvcgRzv@J!jTy`R$T&1c;=Z!UT?rL(}6TwmQuF%!fHJ1E{1K$Ys!Pl-b zOHF>M`RPCp89xI8J<>EPvXD)i4x7^v>v$|k_Sb6Dd8=$QA?v+)Yd-ZTR{Vo0W zD%5;Rl|D^^=ny>!Fu^l|9E|7K@BCH_VYxOf!@BYZ!(xzYfr|5adCM^YC1Mn>(}_O& z!2R1oBt`ODo(WLY#n$wpcadIlrN9g3?d@Hu0S-ZRNC84E+|cdV#{>U0zjW5)QbQCb zXMRT-JhU)zv~Zo)kUX6;x(~`Zb^0B91jS^CTA<;l`0bG%AWBHAL({dupnvOM7^XOu ztidrE)MOdQUAHk;Mqw^cwYEH!zZ~~Khn2_v*vBm0p^BQ#_4~Ioi zvXF`T=|HJq47f1n>er%o<1r4`i|%!OK`y8vYYc3OB1LD$t?dsS?ETdW5FFnJtGtC% zW2h8~b}iR%LwBtj6y!2ON1{DJOGI=jd~1yhKntV7R@&;N6coX6MAhi8$Jcy?7y84Z z!PfA?{ifNz3K)Vi+D99Z-1NADjxj?~0#+~Gy$KFi{-K_!^dN^ zY;-m=m^it1Vyg&e+qegKrq6wi*PXTEq@RV=X|~l`^HIb1Ja6rk@RCqGJbx~+^TTu1 zdSDOa76{(^7yjkR_JQIVx5n~0y=QdkVwRHb_g%bV=O{YRha8q7WCqH&%*?3ky)nJQ z*9$=$#yu--Py1~@z?}c8AM|jI3I)L=JlCG?k7t?%iSeRnX=!g@I(ebFfS8=hN@XaU z?_JGw;L+JB>6irpez8{8fsU<`ku7DreTM(SQ2cz3wpBVoo>H1k-*SFh1Ey}`#d92t7Os0O?? zyftA)#oYPH+WVBzkW9UeB=DYZ&FDh&16-ngU+-$huiU1mS+}YR4k-0tl+!F{uM>F^ z|2T+YR<>EAf}h11w7~yPVvV~>2{$Gsk?DBWZ-bdxUEbGh%9wn(APUeJLfxdC-cVnT z(ycHrbOT{JUqpF54s<_du=A&f8!yS~P`!IPe35xy>P4&Q?Bxz=q7T#_xO&v&ftsR! z?JO?4S2siMPd(HWU^8MLP9yGbwUo&XTa z4s{Mj>9o&oChv@gtLc-=(LCHx_%#R&^H+>a%xf>ZYmVU7D()$$^a-;ZUw+4l^S;px zlI8n2vFUy5z-y6b@uHvM-}kGv(^5J_r6ca}p`Co^o@tCK^Cq7e%-g)L}SN{2;9&puMll7dtJg>c^1^H$Kop_cwK2? z7j?xl%|n;~If|8~kxqEeq!oOF)2-)1Eg<6R{GjmpOQlC>x5QvWjVsdUK5 zz2xKSl4wGKp66h~?JGN~3UABhkEsVC+VGd*byG9ikCjt|4BJe+4d~O#CbkyNY;Z~7 z_o<*OUx_s!TgtZADy9AR4g0O89iTi|C%U#`Nte7~POfe(>ZzQ!gxrd4Q+TGYcA8I> zctY&cF-(4ComAagm-PcVB;^WScFBuz-`(4e)Zn)*nquBm$|@?^uM0FP^pw#91YP&0 zeky)`o%Zdj>*RZkR7TJalNnR?r?5od)~r#ZMvY%pAy&UJ3oN1t z8@w$Y%_{Ana}xTA35N1!*3Snn81#KN=w^LOP?v_aEG^mw!DNcPno9ce)4z~+WVR(; zqo4%Ce5j5UKw&#zD17B&>odONw!Hd&q3ZIYtSM0g?XNd=)^Pn6y`dX^g?LS3&b>&r zYL|!nUvZDgX@6nUfMvsPG&h<4+H-^r)CAp#cX=7bAd!e08E()|0;?~ zavJjMPX+fkDC=J+tfASm_B-$W3=l2d1Ek9CNiH^CJ0jXS1?+vY^+nK`6Nm6WqyLIO z{zXt4P3^DCVd29Gv2SR#WcvHo)_=kn{|4j*7H2+c6*tKt%FFhOkf$*+YN93f;OK{(kbme#{a)7P7N7LC##|Hco$h zIGykqs%pLX-9#dVg*y^uMNB+$RGYAi{qdvn+XQhFdPhD=O4Ltgs4vlMo1(&*NQM=c zWi5~&A5lEdxhnm|dV5CIY`}lw^1|JN(O0d9&O!7=rkX~E2tnIT5rMtxO}g0xk74+a zTsdl%i(}89<>ZDNcT=~m*add%zoiP;w#MmkB~K35rcR882YD$7axdgD%67R4a}QrP zXBe5z{Rs>i+4zeEf-A)}flv>I#XI7xfYuSmN2V^-6&Ir}sCc9BWL33Kp_le2-W?mJ zyF0pZ^r9hYFCFG;h#Q~bIboVxvvo#Ypk7SV?DQXV>=#8lo$BJ`5VQv6pNHwk8?InX zCksAfUUZ{@8&u;}-in;f=V$m|Uy60X4VN1t3?gqDN3GhzzDX&irduxhM9RdZMWr<8 zMv+hIQivwD4B8UF-z}wiFeEw20CBewI;jn=saH!!U`FlX!I1_cZbCjcUTqV{o2X&W z@4Kmye!BI>CYJ`|fQ{ZM(2K5asy~pfhU+NAm8(ttayu=Mn2yiyQG>H;vBuHJJ;Bx;OnojG0!^F?(taayJrEj9%tuO z-CZ4HSOHI;G}Sbacu*Wl`TB}vu@^eH7>Q|(^xvKr4I%N^g3JhkaxyEzey=`@{pwIk zPXEYNJ}LD`zwMa){N1$JKh^&uG#=%TNs-aW?N2JqAIgJmR|)C~1sQWkV!1cc4FRjuNdNuOC3il$%GJkCKW?coQHiEl~B_KFrfu9 zxv{9;^kS@_gB857w2ujGI(^sRH;rN zR(cICN!D8)DE^`F*h$0C{64d~TgNWYp8sj<`{9Zo(LHPT+1b-hbV*PD)Q^E5lpYX! z!ddfH7;j6S$8HCa%H9e~SuhuhqP$a;DM?*(gqnc-@h6FrymRr*ZK*dqG8vX^C;83Q z^N9GV`Q=O(QEv}2Qg=jMC3~{P$$S;ZwL=$~$6zVK?OGNj{&(s9ve1c^<{{iSBtteL zCpoF1uObq-(N0H7xA(_nC-F_X1C@-7GS6&n)Fl!pyNKQzmG&Q6QZ5S7B&Aw4%FY%6 zM)lCefU5Ygezcg4!d`>9$&-zArXuCO0(NXjp*s%%j4{y&`aJ;i1yB>>S`g*E3*~WQBm#JFB zb$3*CG6cD5?jbdIJsT}77%i@=3kg1B<4udl{6jK?I37C%9DI*IblJ+38ZklhQowRw z;3^>~y!MIK({y|3xF`s;+dcFh(hF=Nu7gNJ^9#BboJzon6~(wR(<}wiCPJ zLY(bgxA*O0Av|`Mk-9v&k%OFHbH6iTCWf1o04kk2TK3v9&qObtJbbnxtHt3d-R|`W z^Fv`A7eQuh;Ej_JX#{oi(x?6Xv%4O#v=|~x*|bfXG{?JJ)J0!b5|Smgk5O0=dQhN} z+LXM9v8DZ0bEubjynt&Zems&7Co3hk>u~2~*{t1txS8hNEqcNZ&=VmBuxBO%BAy{) zNCnpcGV>0D&QJT#+9Dj;9eGO4Yxz2JD!pX6WaUm=K1jy$@)X}Y{pzcH#LKYIibFEB z`Gb!}evW;pV=HhmbU!V)xuWz0g$aY|{$WAiZQyJ{z13iB+16_UQ6yi_Z*S1{e2^F= z(|J~-L>;oUX0l^6nV|v%-jW&Uwx>Uv&#i!04Uh!9XYc{Rf*p)E-j$Nh&pk~+R%MQNzyh|OmhD`} zby6dnk=g#Fx)LOrpa(vXBxbwSz4hYfKyAa4z0zWJy{G9aw2|#lnq}iHbTlSuBy9^n z2(@ySuOkBUd^y^rMB)pALh34bE28@77RA)R7VOIZyodRp%2*=(FQ6rzZuy47Q!HYt zGnc~$8&9zFXec;Nz9NIFP-LRa-{?M$T`E1@ivBfy6@Dp>q*T|J$d@!?B*D8~-o;G+VQV785TPmUF+@z;L9n8gchm3m zkpNW`U^s@Xvmu~=0M9lt3x3>)%nAj8)v62OQ zPcjW2C;rZ7PdvQ+fy)Y{zVaE^(6-d*vA2Z5I6T?L0v#>e64(wQd?fkNns=hj8u)Ch4?3hAw z!>Z8vtzO&usBsc&L#N)eJAH&_Ob0v8m5wDqCJp$~ctcJj0BUMZ_r_sSa-#Jbh+$a~ zS{S&PUr|_+5SNz-i(XuUT!ERqt055o)Ij%E@&Rd$6SMiH3?6-tg}NOEv){`E0!u z{t0dYz>EiMoZV_bE;aUnrK7srNqF*~i)OB(PQ^hMdxBhN`?74CweAB#?7QDpjE9+O zb=@X)XTs=@Ch#|#UdA6zy}T5Y1yNOTm9A!nmR`EzhSX@D6~7X(^sR3``Qp`lL;uki zzkG(}-qci2h3(Sok4VdrN>o+NJzeDfxJ_pdJ+-#KA%0|CHDa5FG%E!nkC2*E^?cRX zub^Nnc6{x=9h<8Z_fxG>_s#ks0kh=KZ2#{H(+rEyOzen^Qid1}E86aySOTgcwb;}0 z8_J~}_Z2QhmYB4cyjsH)+!6jSx&xr(xp>h@xHo*KkkvZToX6Czq%^hjDJJRwj4}ir@>)vvvLnEi;|7)jqt+8m}SWgqS|L zwdk?RhYhVWWk=cf-OD$l;{>a54e|`(Ls|hBcpL3&x?sIxbU>?jMtXk1H@1^SrL_

PF;t{kg~ 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 Sy_+X!A1yUKM7fGp*nb0K8JfcY literal 45357 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 LzDC(?+pzxyOk Date: Wed, 19 Jun 2024 11:58:16 +0200 Subject: [PATCH 67/68] Update config.json --- conf/config.json | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/conf/config.json b/conf/config.json index cb02177..336e605 100644 --- a/conf/config.json +++ b/conf/config.json @@ -1,14 +1,17 @@ { - - "NAME":"Torrent Cloud", + "NAME": "Torrent Cloud", "AUTH_USER":"__ADMIN__", "AUTH_PASSWORD":"__PASSWORD__", - "SEARCH_PROVIDERS_URL":null, - "AWS_BUCKET":null, - "AWS_REGION":null, - "AWS_ACCESS_KEY":null, - "AWS_SECRET_KEY":null, - "MEGA_EMAIL":null, - "MEGA_PASS":null - -} \ No newline at end of file + "SEARCH_PROVIDERS_URL":"https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_best.txt", + "AWS_BUCKET": null, + "AWS_REGION": null, + "AWS_ACCESS_KEY": null, + "AWS_SECRET_KEY": null, + "MEGA_EMAIL": null, + "MEGA_PASS": null, + "SSH_HOST": null, + "SSH_USERNAME": null, + "SSH_PASSWORD": null, + "SSH_PORT": null, + "SSH_ROOT": null +} From d8b625d1590ecb850379598e5276cb07b04894b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Wed, 19 Jun 2024 12:08:22 +0200 Subject: [PATCH 68/68] fix --- conf/config.default.yml | 81 ----------------------------------------- conf/config.json | 4 +- 2 files changed, 3 insertions(+), 82 deletions(-) delete mode 100644 conf/config.default.yml diff --git a/conf/config.default.yml b/conf/config.default.yml deleted file mode 100644 index 1d1691c..0000000 --- a/conf/config.default.yml +++ /dev/null @@ -1,81 +0,0 @@ -AutoStart: true -# AutoStart Whether start torrent task on added Magnet/Torrent. - -AllowRuntimeConfigure: true -# AllowRuntimeConfigure is the switch whether to offer the WEB UI configuration to users. - -EngineDebug: false -# EngineDebug Print debug log from anacrolix/torrent engine (lots of them) - -MuteEngineLog: true -# MuteEngineLog anacrolix/torrent engine prints chunks exchanging logs, normal user can just mute them. - -ObfsPreferred: true -# ObfsPreferred Whether torrent header obfuscation is preferred. - -ObfsRequirePreferred: false -# ObfsRequirePreferred Whether the value of ObfsPreferred is a strict requirement. This hides torrent traffic from being censored. - -DisableTrackers: false -# DisableTrackers Don't announce to trackers. This only leaves DHT to discover peers. - -DisableIPv6: false -# DisableIPv6 Don't connect to IPv6 peers. - -DisableUTP: false -# Disable UTP in the torrent protocol. -# In recent versions, the UTP process cause quite high CPU usage. Set to true can ease the situation. - -NoDefaultPortForwarding: true -# Don't broadcast the UPNP request for gateway port forwarding, which is unnecessary in machines that has public IP (of which this program is mean for?) - -DownloadDirectory: __DATA_DIR__/downloads -# DisableEncryption A switch disables [BitTorrent protocol encryption](https://en.wikipedia.org/wiki/BitTorrent_protocol_encryption) - -WatchDirectory: __DATA_DIR__/torrents -# DownloadDirectory The directory where downloaded file saves. - -EnableUpload: true -# EnableUpload Whether send chunks to peers - -EnableSeeding: true -# EnableSeeding Whether upload even after there's nothing further for us. By default uploading is not altruistic, we'll only upload to encourage the peer to reciprocate. - -IncomingPort: __PORT_PEER__ -# IncomingPort The port SimpleTorrent listens to. - -DoneCmd: "" -# DoneCmd is An external program to call on task finished. See [DoneCmd Usage](https://github.com/boypt/simple-torrent/wiki/DoneCmdUsage). - -SeedRatio: 1.5 -# SeedRatio The ratio of task Upload/Download data when reached, the task will be stop. - -SeedTime: "0s" -# SeedTime is the time to seed after a task is done downloading, during which if `SeedRatio` is reached, the tasks will stop and deleted; after the duration, the tasks will also stop and removed. But if the waiting queue is empty, will not remove. - -UploadRate: High -DownloadRate: Unlimited -# UploadRate/DownloadRate The global speed limiter, -# a fixed level amoung Low(~50k/s), Medium(~500k/s) and High(~1500k/s) is accepted , Unlimited / 0 -# or empty result in unlimited rate, or a customed value eg: 850k/720kb/2.85MB. - -TrackerListURL: https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_best.txt -# TrackerListURL A https URL to a trackers list, this option is design to retrive public trackers from https://github.com/ngosang/trackerslist. - -AlwaysAddTrackers: true -# Always add tracers from TrackerListURL wheather the torrent/magnet link has it's own trackers already - -MaxConcurrentTask: 0 -# MaxConcurrentTask the the maximum tasks concurrently running. Too many task consumes CPU a lot, use this option to limit and queue up download task. - -ProxyURL: "" -# ProxyURL Socks5 Proxy to torrent engine. Authentication should be included in the url if needed. -# Eg. socks5://demo:demo@192.168.99.100:1080 - -# ScraperURL: "https://raw.githubusercontent.com/boypt/simple-torrent/master/scraper-config.json" -# The magnet search engine configuration file. Don't set this option (leave it commented) if not intended to. - -RSSUrl: |- - http://domian./rss.xml - http://some-other-site/rss.xml -# The RSS superscription list. diff --git a/conf/config.json b/conf/config.json index 336e605..28657f5 100644 --- a/conf/config.json +++ b/conf/config.json @@ -1,8 +1,10 @@ { "NAME": "Torrent Cloud", + "HOST": "127.0.0.1", + "PORT": "__PORT__", "AUTH_USER":"__ADMIN__", "AUTH_PASSWORD":"__PASSWORD__", - "SEARCH_PROVIDERS_URL":"https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_best.txt", + "SEARCH_PROVIDERS_URL":"", "AWS_BUCKET": null, "AWS_REGION": null, "AWS_ACCESS_KEY": null,