From 5cb23facc562f7ddb9662a59a3162979599a348f Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Sat, 8 Feb 2020 18:23:29 -0500 Subject: [PATCH 1/9] Initial commit --- LICENSE | 21 +++++++++++++++++++++ README.md | 2 ++ 2 files changed, 23 insertions(+) create mode 100644 LICENSE create mode 100644 README.md diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..b8f94e9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 SimpleMC + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..2a2219f --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# mc-kotlin-plugin-template +Template/starter for creating kotlin minecraft plugins From a9afb11967d123ad097394c3fd6560469495cd64 Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Sat, 8 Feb 2020 23:04:45 -0500 Subject: [PATCH 2/9] Features/plugin template (#2) * Added basic project template * Make gradle executable again * Fixed typos from templatizing SimpleHealthbars2 --- .github/workflows/pr-workflow.yml | 25 +++ .github/workflows/release-workflow.yml | 36 ++++ .gitignore | 105 ++++++++++ CHANGELOG.md | 8 + README.md | 11 +- build.gradle.kts | 117 +++++++++++ gradle.properties | 1 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 55616 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 188 ++++++++++++++++++ gradlew.bat | 100 ++++++++++ settings.gradle.kts | 1 + .../plugintemplate/KotlinPluginTemplate.kt | 20 ++ src/main/resources/config.yml | 1 + src/main/resources/plugin.yml | 6 + 15 files changed, 623 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/pr-workflow.yml create mode 100644 .github/workflows/release-workflow.yml create mode 100644 .gitignore create mode 100644 CHANGELOG.md create mode 100644 build.gradle.kts create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100755 gradlew.bat create mode 100644 settings.gradle.kts create mode 100644 src/main/kotlin/org/simplemc/plugintemplate/KotlinPluginTemplate.kt create mode 100644 src/main/resources/config.yml create mode 100644 src/main/resources/plugin.yml diff --git a/.github/workflows/pr-workflow.yml b/.github/workflows/pr-workflow.yml new file mode 100644 index 0000000..6661a7c --- /dev/null +++ b/.github/workflows/pr-workflow.yml @@ -0,0 +1,25 @@ +name: PR +on: pull_request + +jobs: + build: + name: Gradle Build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-java@v1 + with: + java-version: 11 + - uses: actions/cache@v1 + with: + path: ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} + - uses: actions/cache@v1 + with: + path: ~/.gradle/caches + key: ${{ runner.os }}-gradle-caches-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle-caches- + - uses: eskatos/gradle-command-action@v1 + with: + arguments: build diff --git a/.github/workflows/release-workflow.yml b/.github/workflows/release-workflow.yml new file mode 100644 index 0000000..47f1773 --- /dev/null +++ b/.github/workflows/release-workflow.yml @@ -0,0 +1,36 @@ +name: Release +on: + push: + tags: + - 'release-*' + +jobs: + release: + name: Create Release + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-java@v1 + with: + java-version: 11 + - name: Gradle Build + uses: eskatos/gradle-command-action@v1 + with: + arguments: build + - name: Extract version + uses: frabert/replace-string-action@master + id: format-version + with: + pattern: 'refs/tags/release-([0-9]+.[0-9]+.[0-9]+)' + string: ${{ github.ref }} + replace-with: '$1' + - name: Release + uses: docker://antonyurchenko/git-release:v3 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + DRAFT_RELEASE: "true" + ALLOW_TAG_PREFIX: "true" + with: + args: | + build/libs/mc-kotlin-plugin-template-${{ steps.format-version.outputs.replaced }}.jar + build/libs/mc-kotlin-plugin-template-${{ steps.format-version.outputs.replaced }}-all.jar diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..327cf6d --- /dev/null +++ b/.gitignore @@ -0,0 +1,105 @@ + +# Created by https://www.gitignore.io/api/gradle,intellij+all +# Edit at https://www.gitignore.io/?templates=gradle,intellij+all + +### Intellij+all ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/modules.xml +# .idea/*.iml +# .idea/modules + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij+all Patch ### +# Ignores the whole .idea folder and all .iml files +# See https://github.com/joeblau/gitignore.io/issues/186 and https://github.com/joeblau/gitignore.io/issues/360 + +.idea/ + +# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023 + +*.iml +modules.xml +.idea/misc.xml +*.ipr + +### Gradle ### +.gradle +/build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + +# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 +# gradle/wrapper/gradle-wrapper.properties + +### Gradle Patch ### +**/build/ + +# End of https://www.gitignore.io/api/gradle,intellij+all diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..5b47fe5 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,8 @@ +# Changelog + +## Unreleased +### Added +- Initial Release + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). diff --git a/README.md b/README.md index 2a2219f..06f0579 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,11 @@ # mc-kotlin-plugin-template -Template/starter for creating kotlin minecraft plugins +Opinionated template/starter for creating Minecraft plugins in Kotlin using the Spigot API + +## Features + +- Gradle axion-release-plugin for managing semver + - automatic updating of `CHANGELOG.md` and `main/resources/plugin.yml` when a release is made +- Github Actions to build PRs and automatically create Github releases when a release tag is pushed +- [`ktlint`](https://github.com/JLLeitschuh/ktlint-gradle) Gradle plugin +- Gradle build generates both a shadow jar which includes kotlin stdlib and a normal jar without + - Users with the stdlib already on the classpath can use the smaller jar diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..772cf2d --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,117 @@ +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import pl.allegro.tech.build.axion.release.domain.hooks.HookContext +import pl.allegro.tech.build.axion.release.domain.hooks.HooksConfig +import java.time.OffsetDateTime +import java.time.ZoneOffset +import java.time.format.DateTimeFormatter + +plugins { + kotlin("jvm") version "1.3.61" + id("com.github.johnrengelman.shadow") version "5.2.0" + id("pl.allegro.tech.build.axion-release") version "1.10.3" + id("org.jlleitschuh.gradle.ktlint") version "9.1.1" +} + +val repoRef = "SimpleMC\\/mc-kotlin-plugin-template" +val mcApiVersion = "1.15" + +group = "org.simplemc" +version = scmVersion.version + +scmVersion { + hooks(closureOf { + pre( + "fileUpdate", + mapOf( + "file" to "src/main/resources/plugin.yml", + "pattern" to KotlinClosure2({ v, _ -> "version: $v\\napi-version: \".+\"" }), + "replacement" to KotlinClosure2({ v, _ -> "version: $v\napi-version: \"$mcApiVersion\"" }) + ) + ) + // "normal" changelog update--changelog already contains a history + pre( + "fileUpdate", + mapOf( + "file" to "CHANGELOG.md", + "pattern" to KotlinClosure2({ v, _ -> + "\\[Unreleased\\]([\\s\\S]+?)\\n(?:^\\[Unreleased\\]: https:\\/\\/github\\.com\\/$repoRef\\/compare\\/release-$v\\.\\.\\.HEAD\$([\\s\\S]*))?\\z" + }), + "replacement" to KotlinClosure2({ v, c -> + """ + \[Unreleased\] + + ## \[$v\] - ${currentDateString()}$1 + \[Unreleased\]: https:\/\/github\.com\/$repoRef\/compare\/release-$v...HEAD + \[$v\]: https:\/\/github\.com\/$repoRef\/compare\/release-${c.previousVersion}...release-$v$2 + """.trimIndent() + }) + ) + ) + // first-time changelog update--changelog has only unreleased info + pre( + "fileUpdate", + mapOf( + "file" to "CHANGELOG.md", + "pattern" to KotlinClosure2({ v, _ -> + "Unreleased([\\s\\S]+?\\nand this project adheres to \\[Semantic Versioning\\]\\(https:\\/\\/semver\\.org\\/spec\\/v2\\.0\\.0\\.html\\).)\\s\\z" + }), + "replacement" to KotlinClosure2({ v, c -> + """ + \[Unreleased\] + + ## \[$v\] - ${currentDateString()}$1 + + \[Unreleased\]: https:\/\/github\.com\/$repoRef\/compare\/release-$v...HEAD + \[$v\]: https:\/\/github\.com\/$repoRef\/releases\/tag\/release-$v + """.trimIndent() + }) + ) + ) + pre("commit") + }) +} + +fun currentDateString() = OffsetDateTime.now(ZoneOffset.UTC).toLocalDate().format(DateTimeFormatter.ISO_DATE) + +java { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} + +repositories { + jcenter() + maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") + maven("https://oss.sonatype.org/content/repositories/snapshots") +} + +dependencies { + implementation(kotlin("stdlib-jdk8")) + compileOnly(group = "org.spigotmc", name = "spigot-api", version = "$mcApiVersion+") +} + +ktlint { + // FIXME - ktlint bug(?): https://github.com/pinterest/ktlint/issues/527 + disabledRules.set(listOf("import-ordering")) +} + +tasks { + wrapper { + gradleVersion = "6.1.1" + distributionType = Wrapper.DistributionType.ALL + } + + withType { + kotlinOptions { + jvmTarget = "1.8" + } + } + + withType { + minimize() + } + + build { + dependsOn(":shadowJar") + } +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..7fc6f1f --- /dev/null +++ b/gradle.properties @@ -0,0 +1 @@ +kotlin.code.style=official diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..5c2d1cf016b3885f6930543d57b744ea8c220a1a GIT binary patch literal 55616 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100755 index 0000000..24467a1 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,100 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..89fd768 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "mc-kotlin-plugin-template" diff --git a/src/main/kotlin/org/simplemc/plugintemplate/KotlinPluginTemplate.kt b/src/main/kotlin/org/simplemc/plugintemplate/KotlinPluginTemplate.kt new file mode 100644 index 0000000..ba46947 --- /dev/null +++ b/src/main/kotlin/org/simplemc/plugintemplate/KotlinPluginTemplate.kt @@ -0,0 +1,20 @@ +package org.simplemc.plugintemplate + +import org.bukkit.plugin.java.JavaPlugin + +/** + * KotlinPluginTemplate plugin + */ +class KotlinPluginTemplate : JavaPlugin() { + + override fun onEnable() { + // ensure config file exists + saveDefaultConfig() + + logger.info("${description.name} version ${description.version} enabled!") + } + + override fun onDisable() { + logger.info("${description.name} disabled.") + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..e527e05 --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1 @@ +someconfig: true diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..f8b6175 --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,6 @@ +name: KotlinPluginTemplate +main: org.simplemc.plugintemplate.KotlinPluginTemplate +version: 0.1.0 +api-version: "1.15" +website: https://github.com/SimpleMC/mc-kotlin-plugin-template +author: tajobe From bcc168a2ca54cb35f060ff48af231d71e7b57c36 Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Sun, 9 Feb 2020 21:24:48 -0500 Subject: [PATCH 3/9] Ensure the base jar is ready for use (#3) * Ensure the base jar is ready for use Standard jar is the full-fat jar with all dependencies (kotlin stdlib included) Added `nokt` task to create a shadowed jar excluding kotlin stdlib * Updated release action jar reference --- .github/workflows/release-workflow.yml | 2 +- README.md | 2 +- build.gradle.kts | 19 +++++++++++++++---- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release-workflow.yml b/.github/workflows/release-workflow.yml index 47f1773..8e99a8a 100644 --- a/.github/workflows/release-workflow.yml +++ b/.github/workflows/release-workflow.yml @@ -33,4 +33,4 @@ jobs: with: args: | build/libs/mc-kotlin-plugin-template-${{ steps.format-version.outputs.replaced }}.jar - build/libs/mc-kotlin-plugin-template-${{ steps.format-version.outputs.replaced }}-all.jar + build/libs/mc-kotlin-plugin-template-${{ steps.format-version.outputs.replaced }}-nokt.jar diff --git a/README.md b/README.md index 06f0579..6347a0f 100644 --- a/README.md +++ b/README.md @@ -7,5 +7,5 @@ Opinionated template/starter for creating Minecraft plugins in Kotlin using the - automatic updating of `CHANGELOG.md` and `main/resources/plugin.yml` when a release is made - Github Actions to build PRs and automatically create Github releases when a release tag is pushed - [`ktlint`](https://github.com/JLLeitschuh/ktlint-gradle) Gradle plugin -- Gradle build generates both a shadow jar which includes kotlin stdlib and a normal jar without +- Gradle build generates a shadowed jar which includes kotlin stdlib and a `nokt` jar without - Users with the stdlib already on the classpath can use the smaller jar diff --git a/build.gradle.kts b/build.gradle.kts index 772cf2d..cc61258 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,4 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import pl.allegro.tech.build.axion.release.domain.hooks.HookContext import pl.allegro.tech.build.axion.release.domain.hooks.HooksConfig import java.time.OffsetDateTime @@ -101,17 +100,29 @@ tasks { distributionType = Wrapper.DistributionType.ALL } - withType { + compileKotlin { kotlinOptions { jvmTarget = "1.8" } } - withType { + // standard jar should be ready to go with all dependencies + shadowJar { minimize() + archiveClassifier.set("") + } + + // nokt jar without the kotlin runtime + register("nokt") { + minimize() + archiveClassifier.set("nokt") + + dependencies { + exclude("org.jetbrains.kotlin:kotlin-stdlib-jdk8") + } } build { - dependsOn(":shadowJar") + dependsOn(":shadowJar", ":nokt") } } From 152b180684db0b5439635a77ff572edaf7f6febf Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Mon, 10 Feb 2020 19:48:20 -0500 Subject: [PATCH 4/9] Fixed nokt task to actually include sources and dependencies (#4) --- build.gradle.kts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index cc61258..975ab47 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -116,9 +116,11 @@ tasks { register("nokt") { minimize() archiveClassifier.set("nokt") + from(sourceSets.main.get().output) + configurations = listOf(project.configurations.runtimeClasspath.get()) dependencies { - exclude("org.jetbrains.kotlin:kotlin-stdlib-jdk8") + exclude(dependency("org.jetbrains.*:")) } } From 8fea6bc6b37f5ae0db3d2022a2c649c14bfe9359 Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Thu, 24 Mar 2022 18:48:41 -0400 Subject: [PATCH 5/9] Update dependencies to latest and improve plugin artifacts (#6) * Update dependencies to latest and improve plugin artifacts Update java, kotlin, gradle, spigot, ktlint, etc Switch to incrementMinorIfNotOnRelease version incrementer Improved packaging/artifacts by providing a plugin jar that will load libs (via spigot's `libraries` in plugin.yml) and an "offline" shadowed/fat jar shadowJar dependency relocation to prevent classpath pollution Simplify automated CHANGELOG update by making the format predictable * \N sequence was not working for changelog regex, replace with negated \n * Use default 'v' tag prefix instead of 'release-' * Fix first tag link * Release version: 0.1.0 * Revert "Release version: 0.1.0" as it was just a test This reverts commit 919b163f1dc009ad4c7cb54e496ced292b201f05. * Add comment explaining the plugin.yml offline copy * Replace jcenter with mavenCentral --- .github/workflows/pr-workflow.yml | 19 +- .github/workflows/release-workflow.yml | 24 +-- CHANGELOG.md | 4 +- README.md | 5 +- build.gradle.kts | 166 ++++++++------- gradle.properties | 4 + gradle/wrapper/gradle-wrapper.jar | Bin 55616 -> 59821 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 260 +++++++++++++---------- gradlew.bat | 25 +-- settings.gradle.kts | 8 + src/main/resources/plugin.yml | 6 +- 12 files changed, 280 insertions(+), 243 deletions(-) diff --git a/.github/workflows/pr-workflow.yml b/.github/workflows/pr-workflow.yml index 6661a7c..1b60a68 100644 --- a/.github/workflows/pr-workflow.yml +++ b/.github/workflows/pr-workflow.yml @@ -6,20 +6,11 @@ jobs: name: Gradle Build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 - - uses: actions/setup-java@v1 + - uses: actions/checkout@v3 + - uses: actions/setup-java@v2 with: - java-version: 11 - - uses: actions/cache@v1 - with: - path: ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} - - uses: actions/cache@v1 - with: - path: ~/.gradle/caches - key: ${{ runner.os }}-gradle-caches-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle-caches- - - uses: eskatos/gradle-command-action@v1 + java-version: 17 + distribution: temurin + - uses: gradle/gradle-build-action@v2 with: arguments: build diff --git a/.github/workflows/release-workflow.yml b/.github/workflows/release-workflow.yml index 8e99a8a..2ddd0a6 100644 --- a/.github/workflows/release-workflow.yml +++ b/.github/workflows/release-workflow.yml @@ -2,35 +2,27 @@ name: Release on: push: tags: - - 'release-*' + - "v[0-9]+.[0-9]+.[0-9]+" jobs: release: name: Create Release runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 - - uses: actions/setup-java@v1 + - uses: actions/checkout@v3 + - uses: actions/setup-java@v2 with: - java-version: 11 + java-version: 17 + distribution: temurin - name: Gradle Build - uses: eskatos/gradle-command-action@v1 + uses: gradle/gradle-build-action@v2 with: arguments: build - - name: Extract version - uses: frabert/replace-string-action@master - id: format-version - with: - pattern: 'refs/tags/release-([0-9]+.[0-9]+.[0-9]+)' - string: ${{ github.ref }} - replace-with: '$1' - name: Release - uses: docker://antonyurchenko/git-release:v3 + uses: docker://antonyurchenko/git-release:v4 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} DRAFT_RELEASE: "true" - ALLOW_TAG_PREFIX: "true" with: args: | - build/libs/mc-kotlin-plugin-template-${{ steps.format-version.outputs.replaced }}.jar - build/libs/mc-kotlin-plugin-template-${{ steps.format-version.outputs.replaced }}-nokt.jar + build/libs/*.jar diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b47fe5..dc9145e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,10 @@ # Changelog -## Unreleased +## [Unreleased] ### Added - Initial Release The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +[Unreleased]: https://github.com/SimpleMC/mc-kotlin-plugin-template/compare/5cb23facc562f7ddb9662a59a3162979599a348f...HEAD diff --git a/README.md b/README.md index 6347a0f..55ba7b3 100644 --- a/README.md +++ b/README.md @@ -7,5 +7,6 @@ Opinionated template/starter for creating Minecraft plugins in Kotlin using the - automatic updating of `CHANGELOG.md` and `main/resources/plugin.yml` when a release is made - Github Actions to build PRs and automatically create Github releases when a release tag is pushed - [`ktlint`](https://github.com/JLLeitschuh/ktlint-gradle) Gradle plugin -- Gradle build generates a shadowed jar which includes kotlin stdlib and a `nokt` jar without - - Users with the stdlib already on the classpath can use the smaller jar +- Gradle build generates a standard plugin jar which will download dependencies declared as +[`libraries`](https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/plugin/PluginDescriptionFile.html#getLibraries()) in +`plugin.yml` and an "offline"/shadowed jar containing necessary dependencies diff --git a/build.gradle.kts b/build.gradle.kts index 975ab47..67dbd78 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,85 +1,72 @@ -import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +import com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocation +import org.yaml.snakeyaml.DumperOptions +import org.yaml.snakeyaml.Yaml import pl.allegro.tech.build.axion.release.domain.hooks.HookContext import pl.allegro.tech.build.axion.release.domain.hooks.HooksConfig import java.time.OffsetDateTime import java.time.ZoneOffset import java.time.format.DateTimeFormatter -plugins { - kotlin("jvm") version "1.3.61" - id("com.github.johnrengelman.shadow") version "5.2.0" - id("pl.allegro.tech.build.axion-release") version "1.10.3" - id("org.jlleitschuh.gradle.ktlint") version "9.1.1" +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath("org.yaml:snakeyaml:1.30") + } } -val repoRef = "SimpleMC\\/mc-kotlin-plugin-template" -val mcApiVersion = "1.15" +plugins { + kotlin("jvm") + id("com.github.johnrengelman.shadow") version "7.1.2" + id("pl.allegro.tech.build.axion-release") version "1.13.6" + id("org.jlleitschuh.gradle.ktlint") version "10.2.1" +} group = "org.simplemc" version = scmVersion.version +val mcApiVersion: String by project +val repoRef: String by project + scmVersion { - hooks(closureOf { - pre( - "fileUpdate", - mapOf( - "file" to "src/main/resources/plugin.yml", - "pattern" to KotlinClosure2({ v, _ -> "version: $v\\napi-version: \".+\"" }), - "replacement" to KotlinClosure2({ v, _ -> "version: $v\napi-version: \"$mcApiVersion\"" }) - ) - ) - // "normal" changelog update--changelog already contains a history - pre( - "fileUpdate", - mapOf( - "file" to "CHANGELOG.md", - "pattern" to KotlinClosure2({ v, _ -> - "\\[Unreleased\\]([\\s\\S]+?)\\n(?:^\\[Unreleased\\]: https:\\/\\/github\\.com\\/$repoRef\\/compare\\/release-$v\\.\\.\\.HEAD\$([\\s\\S]*))?\\z" - }), - "replacement" to KotlinClosure2({ v, c -> - """ - \[Unreleased\] - - ## \[$v\] - ${currentDateString()}$1 - \[Unreleased\]: https:\/\/github\.com\/$repoRef\/compare\/release-$v...HEAD - \[$v\]: https:\/\/github\.com\/$repoRef\/compare\/release-${c.previousVersion}...release-$v$2 - """.trimIndent() - }) - ) - ) - // first-time changelog update--changelog has only unreleased info - pre( - "fileUpdate", - mapOf( - "file" to "CHANGELOG.md", - "pattern" to KotlinClosure2({ v, _ -> - "Unreleased([\\s\\S]+?\\nand this project adheres to \\[Semantic Versioning\\]\\(https:\\/\\/semver\\.org\\/spec\\/v2\\.0\\.0\\.html\\).)\\s\\z" - }), - "replacement" to KotlinClosure2({ v, c -> - """ - \[Unreleased\] - - ## \[$v\] - ${currentDateString()}$1 - - \[Unreleased\]: https:\/\/github\.com\/$repoRef\/compare\/release-$v...HEAD - \[$v\]: https:\/\/github\.com\/$repoRef\/releases\/tag\/release-$v - """.trimIndent() - }) + versionIncrementer("incrementMinorIfNotOnRelease", mapOf("releaseBranchPattern" to "release/.+")) + + hooks( + closureOf { + pre( + "fileUpdate", + mapOf( + "file" to "CHANGELOG.md", + "pattern" to KotlinClosure2({ v, _ -> + "\\[Unreleased\\]([\\s\\S]+?)\\n(?:^\\[Unreleased\\]: https:\\/\\/github\\.com\\/$repoRef\\/compare\\/[^\\n]*\$([\\s\\S]*))?\\z" + }), + "replacement" to KotlinClosure2({ v, c -> + """ + \[Unreleased\] + + ## \[$v\] - ${currentDateString()}$1 + \[Unreleased\]: https:\/\/github\.com\/$repoRef\/compare\/v$v...HEAD + \[$v\]: https:\/\/github\.com\/$repoRef\/${if (c.previousVersion == v) "releases/tag/v$v" else "compare/v${c.previousVersion}...v$v"}${'$'}2 + """.trimIndent() + }) + ) ) - ) - pre("commit") - }) + pre("commit") + } + ) } fun currentDateString() = OffsetDateTime.now(ZoneOffset.UTC).toLocalDate().format(DateTimeFormatter.ISO_DATE) java { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + toolchain { + languageVersion.set(JavaLanguageVersion.of(17)) + } } repositories { - jcenter() + mavenCentral() maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") maven("https://oss.sonatype.org/content/repositories/snapshots") } @@ -89,42 +76,57 @@ dependencies { compileOnly(group = "org.spigotmc", name = "spigot-api", version = "$mcApiVersion+") } -ktlint { - // FIXME - ktlint bug(?): https://github.com/pinterest/ktlint/issues/527 - disabledRules.set(listOf("import-ordering")) -} - tasks { wrapper { - gradleVersion = "6.1.1" + gradleVersion = "7.4.1" distributionType = Wrapper.DistributionType.ALL } - compileKotlin { - kotlinOptions { - jvmTarget = "1.8" + processResources { + val placeholders = mapOf( + "version" to version, + "apiVersion" to mcApiVersion, + "kotlinVersion" to project.properties["kotlinVersion"] + ) + + filesMatching("plugin.yml") { + expand(placeholders) + } + + // create an "offline" copy/variant of the plugin.yml with `libraries` omitted + doLast { + val resourcesDir = sourceSets.main.get().output.resourcesDir + val yamlDumpOptions = + // make it pretty for the people + DumperOptions().also { + it.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK) + it.setPrettyFlow(true) + } + val yaml = Yaml(yamlDumpOptions) + val pluginYml: Map = yaml.load(file("$resourcesDir/plugin.yml").inputStream()) + yaml.dump(pluginYml.filterKeys { it != "libraries" }, file("$resourcesDir/offline-plugin.yml").writer()) } } - // standard jar should be ready to go with all dependencies - shadowJar { - minimize() - archiveClassifier.set("") + jar { + exclude("offline-plugin.yml") } - // nokt jar without the kotlin runtime - register("nokt") { + // offline jar should be ready to go with all dependencies + shadowJar { minimize() - archiveClassifier.set("nokt") - from(sourceSets.main.get().output) - configurations = listOf(project.configurations.runtimeClasspath.get()) + archiveClassifier.set("offline") + exclude("plugin.yml") + rename("offline-plugin.yml", "plugin.yml") + } - dependencies { - exclude(dependency("org.jetbrains.*:")) - } + // avoid classpath conflicts/pollution via relocation + val configureShadowRelocation by registering(ConfigureShadowRelocation::class) { + target = shadowJar.get() + prefix = "${project.group}.${project.name.toLowerCase()}.libraries" } build { - dependsOn(":shadowJar", ":nokt") + dependsOn(shadowJar).dependsOn(configureShadowRelocation) } } diff --git a/gradle.properties b/gradle.properties index 7fc6f1f..0d870d0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1,5 @@ kotlin.code.style=official + +kotlinVersion=1.6.10 +mcApiVersion=1.18 +repoRef=SimpleMC/mc-kotlin-plugin-template diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 5c2d1cf016b3885f6930543d57b744ea8c220a1a..41d9927a4d4fb3f96a785543079b8df6723c946b 100644 GIT binary patch delta 26784 zcmY(qQ()d-v^1Q?Nn_i#Z9lPX+tx2m1#f8hrovJLl%y?wftF_nI|p zW>$X_MC~F(1N}F|RLaG&&Tn8~xDa4q%*j8=v621@;W|ljjXJ(Cd05I?9UtkX%%|E)oUGMcKC=et2b3kF`*%WWN1?yG^FzphaRHAj@ z+7)ldMgoEsv*yfZWvC}nQ!}N@76J;sjs@R?Z&O((h^(4uFowol9RI28OmL{pQ`1Y6 zTNGpaT*Hs;s@pDlEbv*h=eyI0P(|VK2G?r(lL}ABoXpGRR?bjNl$=Q$Shb#ct>4hF zFKZf~8PTNT@Ybk*N~6Jcz5b!9l7P3@r#h@KZv-yTlg)iZS1MgY1^(W#43pc3-!{@T z2-%#mB%388qzDSE14?Co8wpKey1}pLxtWx|iXRc0blIAD*;k$}PtTjl(QhLc8o|6e*SqWytp^W){ri{BV{aZ}snt`-mJrXtFZ|*3 zb0gl}U&@ro&beMZ-{zR+RoTzg?&0QJn>IzwuIX*_txi=WofJvbe9yMTihZ9OV^gb! zZAbKn_-Z3J{`4dIep4|V8E{gTgMfqw1A~PH0|OHUv-!qQO$-GFM)BVf7Y-_|2hZooSr3#?kZ4vUtw+ruLV>b8!17 z+!N&=w${aT&oUtS;E}%@1TyXEpIU3)`TK0Z{U!AA!5UQj0+IqlXEPjvg2NWiNMWHg z!@HTd6-{L!H_?knwS^bm_FD%XWO8w|prsj`uEkeU&2 zQ~LjjGW4eq{cfW2XCkJU1c}K6G#dDgB%&zH0@`ANqcfMa#Wgb>H>BKM%}bH}1#O%j z;WJia7hywV>##X>fvo+cRWg*uWO>4F6mxoI#4qmDE6t-RQJt|ngK1rN0N6e2Zfk2A zyn5uFbe%x@HD%qE>A|tF_rxP!z)*((5p{9Scom<<#nGHG!`J4BH6|GCSjv0~P3(1N z?U^WWX-_^y;>Sc?i)M1>sA+k6+p(CXaQcvTcB?UlsMp#8PHnoh$kLf?n4yNRE!HVf zVSqLi552<#>cD!(y=KsZ0wT0SgQn9F^1K#^5-7a5sU00k^Lk{e*VKl}LA^1qseOXQ zwH>Bt?yg*oSts=Ij+qv4?G=1-T{_CG(V0faZTLn&5v51%xNBM)5) zbBum*`j)lPxhEl@C|j+`6qW*Guuyo#1Hy?xO&&MQ#d*1R;12>ifLm>fv0rvHj5rZF zbTGq~VB}7ZQEwKbl%E@OVVSExH(uVWjf%A|9(q)WAwHXyEEm%bTN}0kkB|b1cHex$ zOIZqr&kN5`BlDsij5twQToA$!e;sWGR*klT;UA)exj7Ut!PM$CaZ#pDXg2{ti&nJD z?yp!&ryHWWp{fA|812eI8SUAfm-sHQM`#=u^}_cK7!&H(;&H^NBYZp5gWA~(4!OAt zD!astwBP*^LVQa;G)GUz@+edf*xa{iBOYDafAq-u*q-becbo z+Fq8@stFDvN@Qf=|W9DXPLkjg4)A4W5n$FY(F$mn{%C=of6BHnOgYD14P^A&&)-UR1 z<;CU&?;$oAoi!nfyF(k8V!-iXDuICz7L!dNizy^0E+Hx2V6GE{2HV!ezY4t2d-ea^ zd_e@~IC1=g9YB-;9LZA1Ri$UVD&RY#6-{Y0+#L!4zo{?Sjp9!_-=fdkc)CHeU~7_| zz_VY(x(Bl%N1YDk9FelZ-97;XwXx4f!b+_8?)$EB+_GHejraQ zc|3w-z3Mx+3kqfQFR}R@azxb45^NDh9v6NI&kR4g0~RQ}e!BR%Y3a6^dE_FqLj}qS zd>%!hC;RX~A*Uehmxf&G7(b|owMe4j3hs?^IB!29>}S{y2~Wk&4BYLqe2K@a%H@5l zqSsR&fAq#pXYU*6r%G~-$6B)>qK}JH{I%iFP3V0Mf(+abe1qbIk3JE+zk~t5iMmQL zZGNEQDD&j1SJEuo{uC*PdtwEr6N^vYBCII;aIR?u! zZob*eqjUygzJKGT7XAg6YzKXZ=+mOt&jASr_6O!aJpKO>6o7$)k+85d@vwJKzQ7>@ zN;P)W@HH?#9l5f@EznhEXfSj|Ht@hHHR$1O?DRG97GSja|Rpia@YC?2w zMwS3)!-Su~;XKlhAwGOZhq=e@jwR5SRQb|#`D3bTHa$H&pO(fdt+0@RKxHr3n5T7h zl+|h3L%^{2+z-=8y&9?;4^}Ij$na?-`f9mq!!OJT&9T4#J`7m#yxJ8QI$8q0LFRpL za!Ml=I8TkTa~tp+NnKwExwU!;5vON_svpkPx!$-30$2$c)-@uoSzSU`bBz0@5Hz<- zU6%His|teLVD9)niPui8la9LTac&DV2@MV%B~x&9)xxv=!>#mD&Fd6Sn$gi!lLsa( zGJ{B;TCz!X@AYNzFv9fUu+9K;YMiOsLpHM%6xnvFS62fURacL8*#Y{Z(<2_ZCADmA zhtjN@M(grq#$|%@B&$JnLpm?DU8v2qBHW$Aj#hK5 zUw9*j_Ty|_saDG1x~GF0-yL}D3keCa;tLiBX%Wz>MImmqGoc-Ei$Vuw;?>4cM}_C)=x-s(dYqRw zy~0twJw*lit%8a2`)&Y&n_F4gwBCG}m9vXk@t>nDdrWV86@jX*{TS=Gg_^b8d)sB9 zzv0u*HgmN#K4c#D$2o@#u)FXGtTk5mkJjI1g{&0+B1TzWyPZ=mS>M`4F7V=_9{IGp z0K~$_e!P~JwuoB@%w>f(M835f+9w!}ed*y_bkYxb?}GejX=Wh4`hu&_IWr4%h%#Nt zec_!?E@ot0Qhs+`&Xe+qw(iBUDCn@~acX|EEuMlU&X`zlJOz4g|1nvZpMyM)5^P>d zt2t);^CO(;pAp;zx9T%L=|}Ll_b8M1(m$n9?1c`^_yck>w4UUrgeiCF z4CAKQN8$^5{uL>JuyG6-;{^q^<($n>1Y!+9A(zH3KDHo5XoQW>!Ob zzsE(ZBA2^qUG&z$q-tkmE|*~COfKS}topV-M+u>cex_A~UsPw8r9OTt(Nptx`>gkX za?bxE8IfRJWDQs$YDp(2%-^+-tEa^c0VAa za@UV8Kp7~BpM>^x9uWa2rgzFe?Wj7y6Ho7R)JXP;2rjxvb+b@PvCrJNl_(|qwOP`= z_ot2~4*fRgNc+<#VnAKm+&79;-&roHu-uy0wd?69>k(@>OMyPB$PV5Q7syQ8hr?P*%jrt4KEf^8@(kcXodcYl{nxmuCx8jeg_tSj>5^qN+A; zY0v>wO4`mUkIQU%Db_+t_9={@$DFM_9gj!ZhAPwlZeUQV{Nm9nDLt;R4p;8cu{zbn zwrG#?^SZ5d2<(B7QwL14nsgQ7k1Iu+VS3OvuI+j)PEG?Wu%$=|T-lS>{T{ci@oLMj z^KPy=G-^g@HR6)U_Ol3QYPM3#cJ><@B?y2QM-u~Y^gL>=GZWcTE%>F!e__q4GR!7F zxA%m6t91nG98p1}*5|4!)P0KUxCWFgXq2R2B0N*i?`|kt5l?KnVhB zLw%<9#M(WWT!Q!bU1-u}#AJ;E0;*&5dZ)jX26}ykWn`fIqI+rjZ!q@J-+}~6o#xnc zMu@dX@;gHNjQ5??Z1?_OglV8UK6W?uZk!=FwPS(FlcFfNc`RbPcv3auV}FRyi8|tyt`Q z#!OUr`^FN`_yzTUOF6+=X^IvN46K3*42<-DOBojUpYeJ`2hLk>IaO#(cf0wKU_*9a z0t5@*#A678h5KXtgAj)PE=k)n1YOL#G0%ariK3*OA%!xf%ugG>g`w2FFsyWL4vlv} zq<|65@66u)>8vG}mVK(%)B57`xtCg}DI9c?eUt5f7x0|tcinlC_mJ;)-D>nT?Z%7- z%+r0U&@Rsd-lxK6eFCQ+?bd;nb6?)SC5gRHUEWgD0~Px27R)$;BS0okN$GL|<_+SH zIfi@_ObBNXzfIe%G3G1a(|xUx{D%9#57boZQ*~HX>eo4kM`F2_Mg|CMh}Yi{%uiw3 zYZPUk6e8u-HyG_f5$O(o7j*x|d_SiL_{V1$GGw`FAbFo63MuV9j68$SGoVhZ&NDpB zW%q0jE%%6VaKf)v>7NuX>)(*w)rS=P*WP?jJ$jXoQi%*lu%jfap)6VlvFUq8#kCe- z=;}w(nNg=p>A0in#bs+YeE9ri4N!hafc zUfwi=qN&_fJ)k2+(JM5|tEV}S&Ek7YU%iJSg|9q z=6dQ%rLh=`ofmPWf`pu_W6xtik&9ptFD|hnUZuJfg$16m`F*ha?rv8Luj%mA?*hkB zQHGnF?WL{eTEEqmr)}kia(w$-zsCSyGxY>S?uaRK3a-s5^%bmyQh7m3$K_%hYb>k# zwkM}QbKBkY7@ONO!=f-MoUGI9n;UK#PJT2k)wK{!go9>tb+zT)-M?x9Wd6(Z@1CvC zkIz@<@SdK~;#V0u#Dn`snDU?7PaYRBY%HC{cY7u-@!`35ht3Dis>srDqaPr_M3$tu zTvxO#IvlTyV(4U;U$s(fm{CKzm{B%Q70gs8LsKy0n3bWY38v7omJ&F>Hk&loV&H_^^0o4tc)Y>+J5j+d4JE1JKU93viLgkXGxBZ0(GSoEjR6f})>)u5t&?0|*CL-0 z4z*6Op+iysjoO<{v3SZP1R*6dC4UWny=>#EA;g7 z8OB~p)6Yue>k&R$g}t!BReA&*kKC=`+4X_QE3w&5eEB){}9=_}mgj5h)d?dku5MpqihU<4pD? zQ!-O&g4NE9BBhdegM3-dr@4R3@-K3dStZm z(Yl^Aa{xRV$=an?gaWBu_PAvHN}35-@j93N|EXX7k2 z1N9K;xi-AUhK>^N+F*kTdg^jl4le-<%#Q_cy8I4+iI<1W5j->$Hl325x#wqPp|$Vi za@(0l)ghRskJz2N>m15myzb89$qj9 z>s`wz_uVx7PSG7{uf{>bg99EAg3Lb6q?*t1NkP2wqV||KnveBs_STB?jUd3VnA}~a zc;gH}q1!-!(Y;4~7ONP}Upz(XQY$V$wK29B=0Hb;OZ;!%;rJ9F7M(#|TB5-9%&}QK z(^6=hy@KBZPF!j3EY+}-At>z34B46n7gc-8x?^iiK`2g_) z>6dJH;i@~8K>35Q*S4B=3AD@ca6HEb9oFCvUpf@jGu}+a45<#$)2FaOCEIt#K-q)x z*A02^EW*VX+(5B|8`zEff2eSHcYK_hx{HYwv4<0vGbGRvNq6%>qdP}dl5PZ1G%P^L zkm+7okj*&8x%p4$`%s+&*5GFJB3@d>kDSxEm}4If?K^OLZgDm#&+Mgo>=8J>BZZl5 z5)asnI}tIZve=+M$$?VBW0cDKatGM27>j!j7rx!0TUt3 z{MI4~12eQ{DBQvQ=5JWp=95-nG2nm}$O~q$KY*=?pV1o+Ji8bgty?=Sx<5MD-El}6 zVqf1LTS>~Xfj(+ORjkvB3ub@Hd(rlm!*}Jpw;(&VEq{wmETpeMV zaA~XTh$u}>D=V;Uj7f{^3k8@Pti*-Osl~~u1)rBzTD}63hFS;2_xv(il58O7fa?XH z8F`Q^Wt{~LqXm==ad|!g%pUkfu2A_Od~*C=PrfNvh0eAC_Yo(7S6+s+vAleAzV8K# z+)1%F?S^V@G28g?jnu@EJS2l8MrW_fuaa%MnB^1PCcpbf3YvnxmjK7$Y9J!cBz9$u zZ+H9XPk9P2WwUkkGqFATtaW@OsU$Alg)NKL0W_bYTMq{5xh`qm46b-<}l!PRwV}gAi`YGf$VP<+DMY_={9MvIpxX&SK!~PXHihzI;M=oU$I`1tj zP%~nVP;@bS9%Z?cmsNg?4Odk8&dF{@noe8VD!bP{xBG+CHZCMkTEIg0*K`Hosf2xv z(P=5Sj-s&=a}7k42no>bfTEfQx7}rLfp&T8E9lR^*0%7lO>JwAwDie+x8}W#6pd>k zo}wPNN>w4$JjUQQq3oRNw+~u;v^dqc&eyM)Rle0r&%@lQ`kfJFD-bLU-ztJJg2N_kP_U zBcW=6cb?E+TS;F;3v+$xy+5Ah3NA^wdG8qOE04O~(A8Z-2+R)srPy{NS3;TRB{^a= z7e7vywSmh=FhQCxU3I2*t2K1^l;3&E1HrA{m7yVVe}WseJAHEWA zTh>)QL(`Q_U!bxra(L9{)hrl9Y=j=#hu_sFQUk!ZFb0IBTQ7e92Ae2ziV7?t&&+c;dbb zkyKUV7Ds2TAE@i70XhDhfhR6m1_xe*)OEP!yb!G(W*pBv8o>^E&I#f~Z~iirw!v_9 z1%PT7nxn3?TLmVKP4Q7no^7Q8UctyZ`AJ(>&c-=~qOAGN5BKa-I2b+)rGhca>Eg9_ zuK^mSe+)Z=vuckmaa0g?kh9TQR#5>DN=bc?b=4`wP_FJ-6Js`eB8YhdF^Y4%$uOCe z+}8z?Es0f?YIF_`9fO*0DraX&l7`BC3c#5C!{21_I)?hmxqXD(?pi4vIuga#QmFvW^EsR$I%v;4|z}aF(Pf1_eKXyFSq3CC&=9N!iVh51NVV` z9!A{$QMoZ|o%WsF!v8u&mTsS0Y}H-^rb6@%Tsj>tc&)3CWW@QEQ|L}+;V6}s1;8m- z&sAyazK5rDrt5UJ&ek_sZ)tthpS6$_X>$Unn_3uiUEbuPE4bV39lMfKbw9%>SX2L3 zGj-faM`MjZmtWU+R=mVy!tEsw#yYqJ*KTq*tV(yTs)zbamHSDH&`pkg$=!WlR9@pP zi`_kQ$0JL+odP!yNI#*Zo zaUqRH*=H91i@+chvt9NatmfZ|_7sqBHCYc81cTx|m`mA$c-n=hzhT3AB_VPReq2|q zQ9_>K1+f|md&Tk>+yR0kHWO8uj04grvnAcJh^EPsphB_V3N)+(FT{D~2ec6X+mX2m zIhZ}Qe1k*zbTglSJ|p=c-vU!`Jd|`t&zI(YVB;I+bf@Q@bLc@^(=Pu(4jh`Gcn?Fsjrl#0yt3 zd<_b@F?`hu+s(n@(fLv5(ZRmt^%**uDzbv^WmSYyQs8nLjgu~EHBX}(#GI5!;50DI z8oq*|rXi7DP5cfe3+Mv9Y^*Y}jja-^&&Mjwz$htxTXXGOp$AGRoB@MM&p3YxE(ppQ zA$qshS>bb&3JFDUxAlKIIKmtumCW&%hDtsO6PE{O22#9UoIUTN(BE`Kc|cXm4c`b{ zO+8@bkf@r=AwHd6)Cq?+on6$2E8?!df!VN;w2_jW`)gShTY<5vsR>JM)cz6W%a{s^ zfg(}H*`%2vy4(%dd;q`_z(l-w&ri+&I*e1+rRne6779a($Tqy8y^&{*hHta1)c^iI zJ2SrK#+k8QO04&ENW+Dhx(7SeMlQbUzWnNGd8)g^H1^%yAmZ_wZ^x09$lX+6_cmOd zgp2nA_dzNmB1=E8d?y@a)~|AbKQjl56Jc2No3&<>UQ_D3)*FzkAKN`nyTwVzM)j^i zw)hu|rw_Z(_j_+zoUJjgm`ruUr+-Q=w0ekKVqSYc(l6L-RLB`dp7UCn^+Chce(;BZ zyRk>=pL0R||I{9H3Z|sdUfjH$A-USD+l#i}p*|>mf5~tF;d%YP6LV@4WV-hwqU6?< zPU{Pc8=M(a<&6Qq$S_v$({eKCCwVZz83H&+&`44~>4~-sR;n6Lvx4SWMooN!L^{D} z^U!tIqC3<5sTjU!g{uRm01~6+Q`rhoU|czZO71Iowx3crMF+kucb8U;*Hq=YX3z=z$mIV) zP}VH2F3q}~j^BOg4LDvt5mqQuDzof;M}+-cEBw~a$g%s>Ed~+2Lx`trCk}ym&Bq}d za0*E%kVgMcljB#&Vy@H|!uuUv(JAM-7}Gk)NhZc!d#r&`HGb*CYhfrRar4Viw}goI zZ-7nWq>UE+M`#a*$2@e&tvJh|qOSN?SYEeSDNqJ95^nsc{~_a31Pb3w>fpFBJtzWF z@zdw}#-Dana);w)K*Z>u!E?M7{@ma0zu*1BB{1ZZMeddZzW+bjDfwm`ulWy7H9VZM zYgcA9-2e0XW66bpBG;lQvV2MYC^C6g?Lib$I0}Cf5j2Tiu$Y!4q-)2KZ6Zp=efRPt zsc6D-Y-$&H#hl~@@L@$S-<##LU&;GCuU60QT}>nbuRWxsds)hS&uHNwkdDXi<{etkQi5AxkNm)- zhB|1Ju1AciS9PS?*>Ip*W6EW`Ugb`=M=|=B9@6vgy}xwVBls9S^9kIqcb1soPAa#W zm>%BQ(Yieb1N`a?so>Wm{Fs|3W8Lauw~m-M10VMnzg)fZ3AS&>VBR|liZGCWzrtwv z!y;F`u&B}jQmkeBWJIbgb-UzrTzg5;{LX6$^sYnFAKuyn(f(qs8jHm1cA!Tiw#CX=vmHfmBWiyJF6K)}Q5gPguWTrC2IkPGjj5X<&L3DB4?}aN0}VOSJQXQ40JyA)23pB z_6VAKVBJhdL_u!5QV;xyNqX3RlPC&LpOLsxo@pJGoRk(k+9JzSFRX`>yepOEMJ3(A z3gB4yV>@c<>o3CBJ+@a^un@=|7#(sLf%uBwHA`hr-bP(aCns_-%r&7rg~~tp;#1-N zh+uw2?q@-!#6ar$A-A4reL!LGb~bTd+DK>##0I8GOc#>cT!Porgyl+JSIela&*FUi z=UsfEF@HjI>Z3h9v42Ed#D~>8?+<3!!10Aoa|T+jz^2H9Lf}wAgfP=B%Pda~R$AWXC18ZfAf2 zeq?U7Z3Cw1Li-ebA@$#D5ETfw!PVLo?H2!}0x{Kkfsqc1CB04i^z`l{|P9LT~-JY>WH(mL^La=qHpgk9B6Fu`uAb$SP<8na-@hV3eC2X)qR#|ItRp!Kzk8uO$&qMJJg` z2A)*`tycN;2BVMO?5u&>%*iS}Wg!*q6J0Ss><`i>c?c!5t@EKNoe8grOXh1Tm~RSB zhT_2ERC*p&8ur2IrotOZQvPu7Qj5yO>Y8tkG?bRmDqB(*8N$F_K?fLDl-VqYuPWsy zf2YQ|v9P7IWaP+wx79CXZ+ge(ul4EL_I{eFaZq$IE+k^Ry!2#sDl)+ERHNLwglbbL zrn3T>K-tvIW`Cc$S0!gA0d-4i#){AwL9$k4cOfpq5dDC7&7EU}y!ftr+VbXGH{>H& z#)7kr-G(ow#`!X|ssS8m7*hMDoY*R|dSK8*9H0mD9HvU-(QU$CcOGj55emi#8cf5K z42YWtE}k0;Ngl=3W<}|Gr%sHuuuSJbt}+rSazn_nyOr%qG@TgcVK!Z^90jN}$0k-V zIU#F?yl0CoMz^L<9W8Fis?$+bDjs&N#7$@5vS8KamBz$=rhQ@C$*?P@|(FlO`_*jE+XQzEn7_Jco369f$tv#%Pp zboZa?dDxZOY=D!7`II8kp)>GKCI#<|Y5DnJF}k?6>Br)!adptdjTqE&T1Ufo1$PRi z7`QP@=C_nofyL%Dg@ojr?|6BEQGNy+o`(VxgJnKsyn~a9r^X+Fo3O9>)IrFcux8kh zo^D(a7CBxP)0{KU=F{{%JK3D|Vfi~f?QWN(rHOqZeZUA}amHQH(86TnFe!9ne(^Ee zE?C~wj_TtcNoR*nPPvLji6C1<(QP#Ai>C|CwqSfxuL_MqFP;(nCj@8jz8uXJJ$#DC z^DDTn7d*QfO+JN|jB6+%nA8OW!e~jlZ(jW%syj`el3B1 zJ!qL@mN8>SPb5_xy8R;t1!>Qd+CTl(kWXGh4sb!0e&GzoBPuBwqAAMzS9pNa`Ls{* z#wxOu;Oc1n6P2~Y4R%PmqB_-Udh8LMJm6iH0l@bw24hoBpaKL*reK&>Eozv{$B5GmYI&Ew{ND z%Oj+^xKBhL#Qw5@uB@h=KKO>gRpR{M@N8n~O_2Sj8M~iGuRf1qt!VNfm_Z#CtQU~p zP+DJ6=!c*ueOE#sR&_+y2B!~OK5dIH3H*bSc7;;2CU+e1BwLkjDRG#@A)9N0C&~v) zP~}9oCPh~L5#>VfusL9UO5(Wi1RYTy@-K;JM2FKW&oUaW&hDLWvOZj%$Lnw9dv%CY zen?zGvHAevfMU3;#w(Tr|K^D~gz^RojhxB9t&AgW25NrQ)1Q_Jg=&M^DVXk|wyZF$ z`J#DY%`4*)S~jRJH7ZBq+_jc!x(cs6o~pi38gct=@23*Y!>Q#XZ~{YnT@OIAIpYf= zg>t5z#((k6i2v+Evj4FTnNR^Ae+(_cuii`6N%J6%lsTyNGOUehQ7r313KU4R=y?=t z@URkCc~9zWkfqhinhyBif_2>l-&Oj*LXFX~jXGlUqyI$gemTu+)=CRr5I?C&etcMZ zCT~qAp*_4F{_?r`xZZhw_H&y3I2nips~HeJF2uz`rX@1`9Xc(Z1tSeeeP=^MnuIk` zA4J7vW9#9WFlrCKCCf9K;%DC5D-|F(*z?2%^~g(c8_o<7J~&ew4j6fjds7;YP}Ha0 z;cXHQ+GRd^koM$R{1P3-zoXjraihE*(95{3?eW*6H1+nQ-1mk-HY44f+_*`(W9rcx z1=C9$_Vf0x4|@*3{X_wTPzGVdUw+0?`DY*t4KBpXy;Q_{bSP0F3sdbKpef3{go!Mh zENh!+vo4>ms&QXLP&E{|X$#g!dC*T>AcCjLqpvP1b~}D&n5ef8AUQZq>m1`M%aEUr zx<0!mDVxk-u*?kgB{Qp*r&eCIS&OnB)I5m5B5Yk&mu)WowY>>w%E-R&sd5U6pJ%mR z__Be5ZIv<$v!bk#Q8VC7Vfn;;eMjhmkB(a0Gi;k-YM-I?F^VI!h6?Gyie z#}%hrx*Y3+`lh4Rmasj~%T`iBNY+n|9zhSvTjMrs)$4rqZrOoPsv>7B3TRFhXDw2b z)s}bWBet&VN=X2XoJL~T!XaIk^a@wWh!lnYLaN{|x5Sbo3+$vMmNigWne$-`yFO$9 zW1i}IquWMeM%u)Ywqn)O4@WcRuc-TnV`lyJ&GQj#OkL2e_-zeP?^J?N`BgJbYlSuuLBdEd-q-5B`Z zFlPD}_+Gj_JNVvsH~9a^o9us#zy0<{h?AM>pcjTe_6|BMN2&UT%5A`VQ0xRmko#)W zAhGOAVhAz&s?x0*oUq!h+q>9+&%5eC{cT0a*ezfO)o1e2CmF)BScjW6bQvZb-C;pY zDVlKLg%()9i~Ld?LVZgO1&kW~=s;kBQ*qE7{jr*rrk2g>w5ZmqF47t=nQV;)>tScR z&ZZ}GZnU=7w|4`dH(b)caCYipB`>XHt0u;)c{r$ubbr4Vo!XLaDz!VIBTDZ4L78SP zbOv;;NIG*7-E{*``ot17jh z1RrO~1<+TN3-V(pm-_My)zi_@!q+6m*d#kVHE_%gz{I@f&5jd1K?ru!+Y$R@f!Y7u+Qf(@_jJ!N-|QXt@}6(pjo;`` zOhtg#CxbeE-;a`8LG{~`Y`FTr_P``#y0IMTK6B~O5hh1-2;$c>`#Pp1(iMr0Z3ujg zYZqvmGumI;TT3yWYeKK0)QFFfC^qp#c}j3nlTce1L}jRsb(_ z7QEJ!garS^Y=+c+?Hv2&7rIig|-*S@plk)7y;s;-!)VW`D}$F#7`#@QE>X1bG#CT)*w=uWuh6ZxTlvMy!wjI(!%G`IpMwo1GCpNkwP z9d!?PIihxoDc7J>BMs#Li4JT;{5SHA00T4(S|l|Q$9y&s$q|z={J;I92%~Tpj)QvO zPBw`D$>RJihH{u8A`RYTZq_ZAArWOs=(4*mitG`6?m_$(@(y0;FY4gQQ zAUPRG!NH5v_az*<762a-lp7pIdaEk?W$6uUwQNAV0{=I`RI|G~76AU=iV*aFauQf_ zA~|L^jKWj+~60jVOs zY^?eSz6g0!HmQu&#<=FN3>+e2XUTA6d7p&~Pk38;+Q?NFDlD?Qd7cE!_<34B&+ZWS zfiW1bi4geUTB2cCT6ohe@)APv&fv=!i;j^2p(=l0;_12YI0smC*H3Obk2q@56Y*LBpOj(SUKd8L6_VXH$)pfBA=Z|`s{Ucg0 zbv){pZmTqn2j6z@hQ#-DNGTT;iurUK8^t9@Wfcv29GB?^{U+(_T$dX<^^Wt%A8v~P zLw?rUe~cSt|ACKR*N{oo7%{&``D>U-70g0;C0nM$HLto$27JUpdicpDpJ^m%*7Pqk z83)eJfQE78p)!OzzVRt+c!cJ);JqZwSM5_UEDB=_Sdp7~o^On@bL(>ji_|ne3u))o zxwOfnn#D(JVrf?d4ZLuyE>KzuvHKwa96BvJbP|>0ep)FgUyULF~wBU#hH&jtmZlu=eX;iP=th_rk`sYf{gKe-Ie z_+m~Q74C_k_%d8f5t>bY7rMX_ZDvWH3%`(9@U>xzFYexu?hA9>>2#gidY-%s?>b_Feo7KiNr?nykRq_N5~;E58!KrJLpm!RYe!B6SQ&i^><+|NXd{Q(;lPm|$So z%wS+7|I43Y{x^D8s{`k+zPv1K)yC~3&?W*)9#f3=n+S~yM8g$EGJrz!Z6T<(hk|+h zl;La&AJkGSH==8Y{h#u;qMI&@tvj#+84GWFu@bP{=Gk7`*4paVYTf(Q>14?Uf)4%^ z0=#ds{bmK98NS@EJGqtmKKq9x)DN<17KwzEfGns53{bOjmZXn$bSZ6Oekot7bLQxg z<32ILD(D10vpS_r_GCn#Q6X+d&bw04>w(QC&8|nRJk!5-u70UwW!8gFaJZTyFj>*+ z&Ni3m_`CVx^t}eNksXKQ9PMulzWO7nTs-gG_a5b}zY81+MdjY1`OFI)I%VAF?t<;V zfn6$Lr?gK-KBqlRVW-qg2eJ=OQv1cqpF8I#o@ZXxJ!<8c{*9wfi#C*PL%SQLof26F zgJUVBgn`#7iA-^faor!A2PcNOuxBk1%&Et0xq-7LapZW?N9<*blAGm=(1DSoF1cKA z&xkp<&5XiH3mi87or)XY?V}%j$hVjafPSS~cI$oo+RD z<3hyBwfO55ksLL5w9=*gr|Rai1uZJha!I{O<7j`*djZP$L=Q7M;&NHui8&DB*S2=D zT8u$c?)W0gMN>u@S7ec<9NU7)NPAWW2J$f9^sOg5QPNJOXu=kL$jR|Bu(@`}S+dH1 zkY=N2Ck~fwW1)z+oPbLt+@?81%HWR>(YegT zjl&(wB1UAuQd4!CgAF)HlnZ26uhVSrW5+hgA;?fwKb^Jo!i2z`Ky0b&D@)Iu(E!hH z*YvQiEI__gF%z-wFI}Mo1P-P3M=euNqT%fzwi`FG<3{*2LkhKfGo&Z!&kv!bX9v~B zn|rnQFSNQLCU>u%k9ouPUTNZYk-;YUAccl4XU0Ze23N(2P#1J^Etyf;-@1BzM}TMR z=92uE#O2vE^+Q5$46Mg#ol1@94?h~qbRNkv9%U3y*D@DB^M>^kK$~OpjvIF~f7&n# zlVNG#I3m6Uv4*vY7V}L9J8sdpXo2@GY49xMauX62zImWwMb>>(JRm+n(4df~CHMGt z%)g_Gw`8h-zh-rejAgT?@f-VGI#SkdM|kyU^sg?(gW341On4(oO|hKr8t)?0a&>~l zT1kTP0XWO@T#g}lfX*jMn{C^sGAP6R@3T&B+j6Ppy9rFPGG_+9(pr@t6eCG)mm5Q+ z)Xo@HZDC%84fVkv|2tZ5g$C%Lq=w7UK;u~~2*xlMBZ|eaEljy}+@7l1)scPF#Wu`f>exdVp#VaeL!Hr0fFJ>+YnY4>PN=v!#$iSl zJf&?mXre}Cd%^apMW0plhb`|ibiNrx#V=y}Lz2uAG8+cb`?Skc%ViMkZmS&GU)X0zngVFE9mf>vJ~ zylIf3H*Vg1c*5MLJ!y`7s&O~keT5;1MuzU!%AsXz)unlnoOht%0W--riYZ5W!Rw4b zllVVVnf`(*lEUmMf3R|YmyuxOzu4MZ)i{yRx3g))18-#fC&yfc=mgF!dILLzSmhUG z;6ouJG1%;X4+U}-sb9aWd_Dd$rOlKL);a0r%qX4Fh8@9RmrsqM^h`V?W8$zB@Acpu55-Oc`wm%tFNFkmKf8v^{t^XGPghhs|W_O23m5C`HbU5$87=i|3`W$Y( zfR}D)AR*t}cLNkIbCuhV)o6SOB=_&$JRoy?77hsSTV-(N=$g6Y;$oNKZiVt{20t{v zn}s4RU?YCQeJ$;t7^_}yF@@_^sO91hXnWO_4mhIET=A9D=wdj)bhs@@Oa&X)`*dPn zHq=^f4g;cQ{z<5Td87B!0XowKAeD zY@EoU(505&BhZxjnN~t4yUjs!vEnW2M37xeo|Q)f*WL`^|Nh*WiwW$dB%~H;vvgA+ z7ZueYVo^pHorU40_-dEs?8P$ktED>B-oyWaywLFBGa1~?zYD1NEp^vQiQ6g;pwg@H zg62L5Jf^IlY7@q$zkvpzzd{T-Uee#`LjgvkzF>$ms3^E!9Uy07)4y~r#F)_Ozm-@W(cb^qw9>RqRMowa(cGc~pMv9Qo#CusKm>FC$-iR0`1q&B8F z-AagR85PZfAqp$BMhpRl3yGC;@=gW?!;?wYP%^8kO)G*RQb+EeG-F-Y3{325j1wyv z{L=3>lYhRG#V{2)ri8j|Zab0SC#-z4!72e(bzU#qA6fI8*=~fqjE6`QKtxnV5)Qgn z=WA`m?#rsK&r|p@1s`~`h}LbGu9!CEYU;DTjauGw=T}Olr4RDZzi*eFO}dVz^C!G2 zT`D~74QP4{Mtc{;De)e&Dk&|!PEqb?S7bLkx7ldqrnh%49(9D#>2DK!!f`5Vs=x!1 zWChs#6!=LipSMjxQ_3FhF53SKWVEIDe0Kmo)(&aJx0Ezuqg!7y-dHr&9{|DQV8NZz z6JA4)iJG&E=4G8J$VpsLvLoYe`+5woBjTi{i16g-a$4tu*=(j%m(7pI@e2` zUZ`r^Ds6R@+4{MI1MEFbIh?(+&0U$)awS>VdlO_nyRSx8cSv94Dt|x)Y&NpX36ZE3nYyu z8#l~HB)zBvpDjHPIxtsRxC0EGn;2tS*y%>(#%Fpq~^zxja*Oj z*O@3saw;zy_{@_WKHEJ^1V0J1%MkDbsr9T z;w-6#vjQA#C*O+Z2(>hszg?tosFWnCyV!EoH>Hnw-;NcJ;@-dAohzbgV2Oy;;5tBE zG46kXa#qsLeuct~jy*u9nY)){9{QT(u% z8fBmF>owBj(bZvH`eyzd{>$NeTs||{x#2U;YTVw^!uGaEcb;qbjck~V!&EMNb`AmA zo_~hEuDg&`(ZK_#rg0bOpW&>1eg)fTk$`+|QdwD;u8xRnZ7In3{nnE9ykEYoA9O!g zCH_n9tI2Ol)wcQ6k%OUQ>J!fBaCRwaYQ)!H^&%PVs1uDTvo+HgzVbD{A^C%oj82p7 zC99D4KoDKV87qc(S5O@XW|(5?pQRgO)pou+Iade79tFEFeyu71@-#+%XnM#_{+_hQ z<@tZzBqk|Xq$UR6s=E>4{jta<-+NEWTe5g+ctL*!#gDut6IC)N z-J`axcXL7RYF~vl4Sm8tRbr*u!)JF*!e|NaX;xZ#&Pz;;^OR!Sa)lC-1=p_+2F{%4 zz3?M>r5S=koO50_$b>6z4jCJHdc_rrF`vFHYcs-4t3Q4T_+?>XKHOiRGfelG*Bat8 z-?8_vf(Mg9#I!b4unmY7pm2HzKGj6Yw>!#q>>=2IBT`-jwfmhH!D;Kp;FOtE7W(S7 zOs5IMXE=ly9Eg$^E9Fst0Yq?C`!gR>LMUuxcOwPl>CcY>;T&=@_~3fEl0NKo^T(ty zMCLKEsGXv>z$Gi!^>YqOW^!DSFe<9) zHOKC|i8EakQ~I*0oRZu|%|hLrDSLsAF@Idvpg0ZCMvlrYt|{5Qv$CbQuqyS;`Xx6W zR$9EMMjF`mRY(J(KyK|O)k?Oie$gEnI;ExAhhBFrP(!6*kx!m}6=IW=_kDQ>;TM6z zWq`QH43MH7AN&EA`;sVnD{9^u8O0-Q5e(`@J?~jv8VI55CDIwx6~QdSi->!Uf2>Ex zGL{NiCg7hn$2xPW3qDFB%s zimDiAuCJ>whxy2%%v5wa^Y9&vVw|R(^uSz5Gt$KXHycy(G(9=mD$@{n|uTb!|J8@~kbSIp7UjSdP&kM58;%!5;Fw=7bAp4G2H= zmXV|N1;`K_IIRA;z(j)gwF=+^u6lOK`o)2w8wmOGJSRBR4IQ&+dFK(a8gytX zAFw@2MMk;`o!C4oQtKCJC~r0pbtPwFE!pK2!h2CLDe}vjX}krx?B&ZLjs=-HYS75TZrdBao8MMLF(9Lk!K&Q7M&t$ucEat`7(E^yK z*nWbGi;&mGry3XXS%2`GqEEwS$=J0sQOg&|?1=aiLzGh@6Xv^mv`!||8{X#%*0wYc);6O8-wtO?r~o%%s!-XSK+HH*|j&+$qWRGZ*;LIUzm zA&U6|+xTQY;fYPUW#z<7$d+P_dL{+$U<%d0D{2DXmje^xOozc~$#3?_<2~eK#|XJG z^5f~@#AS2Cf?sv-mUdCPIf0;xW|E^3r*x@ziE3{|*e5qS(LU|KN+<9ir3o92Iev}7 zuk#bU>>1)JcQSXcw$sV{->P@ZTp6G7r@M1YXw@9RC!mS=^4GMB;)NGr%AFB*PBsV;Ym`W)TS{J_@Y9AM*;CEc!^sejDm z5)D8zH7NGrsM;4% zZYNa6q2*GH1s&DL5rad2wmwy&N;RonyV}4Ivl&;M#Vu86h6y{Pi?-zAB(2h*-|Z0O z%%qQp(R|rp8gD$G!%Lu`8p3lbm`rYecF3!$O!EXrELfkxV>BNg} zzgUHYnWZ#}ary;sJ^ih7>l9rNHVC_$N`l1+h!INj75W zM~U=(U6VNux_<=TO(}1_ga2C+zUpqUl`RLrouGY5i~W#2y99tp6oh~(YqI^qC<2*< zF;z2*p5641$`v>$TNol3A~bX~L0xuhMH_gac7=s0Rb@!xKVU+#SsPe&bm7cwF6M_n zvsV0kfL>6wu}=)DI8!~nA)FwlVuPQbTQyc>nZAOIYv;GQ_~V^wnZ@c>7|&$}<2Mr% z2iLQ6`(i)ntgNyZ2-TMBFiKr$g6grLQuRvj> zc9`XB{Pa?#^Q%B>I=n|_T@!N#+QmDM^=|cvmWT+uXb?#{$I~##;8e4F=@ECLQ6|Lw8yw(X26C9h#v4E+rOf>%++#Pq zb_iTaf6BG3QIBr=c*bZvzEFNIzw%((+2p7Hua2L$)656?p@cz?1O`U+w~jA3feuX8 zJOSb_U<#Nrl8^5}4a(Hkp%22=F^po#z$S4QiZ@4KGVuMD%m$m3#v2Dovzep}oG8ND zz%#z6%08rA6jQ23!uwus&3`lwvzd-^ItMa4T==+b2^{5k98JDFlo0zPY;z03?cr$Z zqDm!%EqqqjM*_Kh3qwOTL&al0I!R{=e7{c$k-2=r2G6D9Pv$xJx`W%d66Duj@Hb6jObTRFa zwhX7jAV%%`*;)E^S;WD&wuqI3(e$%{oAp1o=FgP@BlBiYYY$SO*#evj#e#Yqz5_^{XQ^_Stuh^9m>NzdV-%0KF^z?exj4)? zRFx;~_axb4s4+FnbBI-|W01QUHfv7B!J*@3r}@YWJN@@Ea7 zUMO#DRWb7IlBmpFk{M>Fn_@XdtlHZ;E7OYg)rS`HO>_az2GnY!YoXQ#N@guxRPVwU z?StReoLLx!^9Ua7BY5jlwCHjKMdkuYLU`mRjYh{XYiM{8izqT!vgYi_Yp%#JpPTFPb_mfVubV?^b_HRnopQr-Wu^BBVX?2nL&8`XjnR;2TDmzp zLUMNuU|F5#q1;tv)~w6&aM1iG1-pBgWzv&EjIM1lx>K(3n}PmO9#91DH_1~hiV=_5 zAzOO_sKEI6!A3A6_dg-wLb8wOZwx!kj};-^#s)_%=gw70%TF|2lgl~Ftufak+uhju>V)zdM_VJxL-6cn z9;r(VOk0nSihv5)_7)DwSEQV!+8xC*9AgKLtg@8Y8WW{e1~YdyvApm38;FN&Joag8 zDTf`q_k*qUNdCQ-siFg+?pVh;gfYzL^ZFi@R^KmO50hw-LucUtq21FKmm1hyEOJ{v z_Z{apyBVkRUl3LBU3k3FQ~L=O*m0F@cTJ*;D)C7K7^9hg!O0)M7GTN}y{(NfFY1nG zO7yb?2IaFOc}{7ckr)ZS(jrP$EHbqdz@~f$uBgBTBKw!=nM4zS8w%=sZdn5;# z+-KOMNTMSVA#;5|)41PetD}@l+2QLtgEKELn<6B2Iaj|mSVr)knv+g>cw56@%;3%& zyH%<;+#2nD`$f=4O<}QNM*ClpS5KM;w7`)cU{^<3d}KnZ*o8l z1dizkm7zQWh@@O`Tz3^k)UoeQx}9#&ot_wRsFGklb!QkLabj$jYaV@F(m&X!sHtg4 z27LUyQ))O^7wTl9A&Cy881G<=rx7ELeusKTYPVywtfFT7^Xk^OF0H2^!VqS(Wpcp^8 z7b>?;t4BOo*5psgb$YbZq{rIkMp@N!vK}FeB zjVAn{Ij_V<%HPphMj%9uvnbJ)ym3dT5Ar$=Te-?-Est3VY3QwvVp>TuW^6b(ofvLs z1ogh}+@0yB<8WGPL_kW4~g2oaz8ba0ms=I_NsMhd~ifez#nS$A-ZKT|) zRF}z+>BPm{FjRry*H?0CrfP(^t}Oc%^s>ZhRf!d=t<7ds@Wj-ghxr|LesHnF2$@HT zP?L2-mGVxV5s{=+p(3Hej7KmBYPXL5f8dtu(C5Cn^6zavqovYiGE?1)!|haGrn6f zYd0-_g3(AWtp%b3=#H{XSnrbDqt(5|M$^J9c*2|+?0B27E=3jm zYBU>(Cm(#sfJzWdoUQL}EISQ(`BDDIjCZFN{@s>Zjpe~|uFTU)3GOb9H3ci!2!0{- zIB=H*7Xs%7mL+vM$IA@ARtP$5i3ll9NeEZ=(5k@}BZ1FIqd3(dF8tqwoh0k*N{~W5 zzhN(~Earb)A?6glU0U*i86hVWlaAcaw0eM9y@GB2R!(c~dJ~hF%aPEWwnYD8i&|w1 zd(Q9;Os}pK(vDh6oyrk@LtLcNer`+xJPfsmuUPZ2&X16|r*D&w52Y`)^Qb7On@v*sqdIBVY z&THx@Z?RSTt@X3K#WMIL+t4L4z7Z}qnafskiG~sQ*z3?)&LGT%(z>EphPf_4T#sH7 zZW;#b^jq)_p(h5;y|lf_lH&g7?47B$vz3OI^AdrI*V|kpe~8avVXTU#*N}*Etf93d z2_RBq9Z9Uz{??!h0^-OCxZ!f;A5>z%A-7n3()ImT$~{iOM3w-z*p6r#PHs2?58UT$ zhiGr#P-6y%m1Oxr&6Wyp$qKx5jtWh+iSrKQUmhAis@HgC4LRle+xi?`W{qCm5Vbls z@>4Tczs4_C+GXz~q1dupn{9NJq*PEu95O0Y*_Sty-Ya~k*k(nj`i0D>*KNEEbSqh= z;j&|;X;DyXSt_^gtOl*-Gmm&`iD6i2^C_Q;Dq1igK&0rns;|-VyCaP6KZY1j>-lsY zPm}8Dfu5v(wOALIXC%wd)FCz`o+imZiCxwz-~^Q$pw7E37dTk7J&Px{Tp?NNS+1FT zyLC8t)_yA&of}qJ**}5lgK268x=8t*`Rm7$^-toD(!ZmaZ>+=fXQTF4;vC}acCMSo zM``vi(pZR#B6%Fk!(U)#4Tc99XYI5O#|vVW?B4i6Wj-eDu|ZMVvJCurRKEhtWn*~q zZg;pyTSRY=GtUt?lkVk-hE+FWp+NSiHPOQ3*l?{DTDUVO%CgCb=5V0^8c=qor3TbR zTt5%6i|v!>z#mApA3FM02}|gB&f_pWg*N(23-@mzhZxXdVZZA+9Ye(*IUht=pPmOG z@ul&-*_22f=2lBl#g+`zZmLQA`mHirUVQS~+t(?SXvr7((rfH?!7TrAS^w{@q!zOh+vu zrHF}}m|$Yw|Agq5v)1EFe{SP_cL1>My}MM7aG1_yo)1xFe2@%PrNatSTzKC3bBDqY zy+-8ON{U1w(s=1&cho4PUx zyltg;-e*XhN1B3BOF$9N?SP(vvT*v8pF6p0N*lmz`KFrq4i41-`K=p(=zFF*IsMTr zNregqCIFi8qX6B75dbH&Pdv~yFy1>kCkp4l|}`6aU9()BMM{<0*4KamRM#e0O&m? zMSiITP%%j2C8|XEJk6zSkChHNLXxwZEYq3dU+iVRn5{>D!ny8+Au<`chg%N{^YRk! zEAV~AF%mKiq^>pS1Ia%pg_Kb8ljmuRRU4;wR@CfAh2B&n$_xRS5p~K7o~uE)sA|<*UvJaES=m%*K)x_*#?7>m{D3E; z<}%00V#t5sUG$zk`}3>Z7Z3afJ*%|PH7dtE|4>8vi!$JDY@HN1ZR!kcyo9xepOUn?>D<}7*v!~qbV!))N{e@ zCvf_DxtE)v>7ktYW=|Ri4d`hS;n$2CtIA(CY-7Kf{}6cAOjSqK))g{MZveIX1Rw4* z&{jFL_Ok(FX~I-_eae2y@r>z@6HcEuiImZZ8FI7bdYyo<&q?ShI!KJeLa?FyU*3=O zozBb*4O46l#>QCZ$Kk5`tsF_h9(1kvs*M~Rzf{~hX7CVV=tm@XoMEJ8R$RER zEjBwv+%Cw$F%6o*W;d8p4hYiOt9PLsb-gv$H zJnF_`$;2NLLFFq_y?0c>oPD=$eGK0|q<4&5nMZwLMooS=q@CKHB8z2oDBTjB2~hYU zMgYe|DI*N~WMMIsb;(kBDdJIi<=leZM3XHL?{N@bH_slgYT}Y$-q8wCt@0DcukKXr zG>X$7#aI}KsQ?HQ!|${MKh@gPT|e>bWY6DHcO$@5QlhDqvYA+7sn3L4Diu{GoF(NY z(BV$fRd3A|Cp(n%JX<|Hu~~Iu>hf3fP41e}r>G)dq@Bpq9*>qu9+<%hG>=%N^SAu~ z2JA&mm3J8Xl_$s`;|{mRnW@q|2R#^R_=&y2*HYnE$h)MYG=wKi?EI1$NMEOdo((v> z@(B{p*mQUI6Z6-tokNdUFAyQEtFWUNXq?<;&t!}6shNaqpaKscSo~DAV_U??W3bHn z_A6Mnn;Y+VSRS|Bb6}<{vLvfzF7MVInBlgm=z^lI;f+xADuv1$RBw3((>F6j9-prug%UAI{pHCxP71#Yo)p}Kd2E14J#vXfsUr}t z4jDWARhw*cU?HTT?dkO7wU^T^?dXY=~fv}Zn`hqdBPg`IH$TH$n zw~a&hT#+=*m9}7n_lmZ&S@ZdYX7ZVdGj#0d@2o#Iys3jjDjGp<1C|%0yV}2WRKzv| zJh2nGg)_S2be&M_cEwyH9i&vaL^QS%j<8%QqTqoCI+Ch3?Y{L; zcR6_dUYo{Z$HGHUM;1Z#wT{X|qo>FA1k^ud&iHxtX|4pYeh*{}InML~f$ujf3`8Ya zV>{WIy%p!i-(Z?9w!49|b^J&3n)L*`+=r14DCk>i>cAd>U8(5s+*-Lm(JI&Qor(Va zPS^P+7%Kh(-?(YF)30cCD>*99DtpmCg;J|bu5gS=&n4= zua)qTl0)Z)GgoEA9`Vs=l@E`b5mZx%#sk}V2^U(^{!ZcV<&M*eTb)0B{@JMFW9y3lJ_-ZLA^vg?6v6R8k;^C`FK85m|GgOl^M8p6 zpI|{Oqu2!hh_(MW>f>4%=m`7Y!2egf9aJ`kLhz63@;^xsNdHM91!at)5d5R*`Va6P z^*=xuQ1Lhx=xG!WU`X*lp<5iR|9TKedkhbtNclIshD-7hq626!e7N|at1$|K|B>#% z0t2J_XLMZV4-f-Lf1D10!1Fgfdz_fyADZYt`1}700x}_k{*0p#{7dBcUu0oml<42l zK4={X|1Yfrv@?Q5@J|>0|0aD*rJBTlvOa;te|`oi>HT$MWD)+(=Kuc10tUwYPu`2c zU!dRwB1lpJ2lV{rV0HM9`3a;t z$qk6{1YKEBf?%cyKogTlfOAifvL*e8O9$Ze09w0UNZwP*d6R;8SVUmN)XRrzWx8ec@ z#`n+5k3{|jDSG39jz&;GhckEp+t|M$%2_gk|M~F<4+h5nPo7c2U(j&?{@=X1Sv){f z^54+aEC<0q>&t)g%+o+3b5?+a+`rhVISD{~K1d{k79=z;3`i~l1 z`Q;xb$KOXJEZ_lhsy32ugXVpny3Pkp3bbV5k0XD07jC;J?0etPfJM zE$zo5_n#NQZ~g$0fj%vL2DpuYNPEaYdLL%c^oPmxF{vn^@g+P!@f_%A$sFLl08&~O Xz<~N#DSxP(f1I)(LnoPiz^J5ZM}kjaFM%6IT@ej+ta&90g-Q zgNlPU5-y3g)>g2zO1&TfEdgvq+YZSgj810K$;3T}Lh^P8=451Lj40^Byo?0}XR#>b#!kfWj*MIfZVGoxV!0)j z+Z}jU!FzaLhTef?vCS(ugn|st5IJX9hC9I!N+cHty)Km8Rina?%-BvbU3Bz<$Y0>ZqLf+3lDh1@i(FJZ zz(dMg@JxtXs8aDEK4R$J6kl7uL$s^-7@ttZ0`!xnUEzX96`$g0kZ+w9>Uq;x7P)<< z;&XhV;!Au*X#J!{gQP}NL$`<$%Kwpyukj7ldo%1@)pCsz-zX5n#Ywwr7BtItHIpiT z?{dvu<(dyn3w&x<&(CRw6^IK4)xcP;3J==g@ycLI#kcrQr1m|-;Qzc`4Ewk1L%Knm zM-9n#EwwgE*tHktrij`^vhjLMjW-v2s;-&YqM0Gho|bY2?Gh_;H~X;S@>26f3_P@2 zc(<6l*L8%L=5YmeV4lWY@;v#UNrfti;`PKRMfn< zF$_mr21*-59%^b_aW1B0BDtlRWI{Nri|O3V^~MD6Zk3TuNq6arkjI{OJl-UKpewdR zN-aR!kk$t1M&!267wMBcK;LHZ7XlL_kk(`LmZm48XLx80>{r_Cz;Rk5o^U@-(5m_h z7({}e)U6mIEiz^Uq$iV%4~?v0$Lte?a?&4=a-q>0!Zk#)>yT^cSVQNSv<@XM)vz-z zMb#R1jfLak=x);P%7voc*&6nLj78!RMuKQAG)(V%Z^Wg)5PK}lenSs~NKW#SJAqDG z`zZJU!f_D8^wB?!eq6#~EI`9;!djpck^B`u!FuvyH;fSv5XUG|1SCSg8`883k;Mg^ z#7h+AG_9xbGJzI8PvaHRI#Z{@KYNwVUL#3A*mDXd%NUT+Eu+`_56S3%lIiygFy>{= zFiw%^n^R}~XUZx<&*>-V%?(HQtzmx+@tKjQ6QMIwk96oq93JVBP6?7~=!+hx;oxIL z;^AK&N$jWR|2)B=T(m#nY8{8yp#ABUR?yQ+sR@!a0zFEwPtyJj!4`CAq@$r569iaj zO>Yo0?a{$JP`eR&hM0^EHyAtcFX_=W_B!MIf0K;}@eRl2?x`CB002w`001f+Eo@!3SXXUDH*qIQd4(bSlb8WNLgNKg{P)6h=ZHOo#jom%>j zOwdGMglOUq@JAW%l!6U3MfYK6=H7G8J$G*A*YEE?0o=!92NRfe;9}OsTnh6JZek&Y z#T1sz_LhTX+;)(FZ)3&A9ft8|VI1n`3<*Dfzr~O&%bH-gSP5hCy1lz2)EmANQN*jr zDv!3f3eCA6OzKA1qTGg(d)>9RZirZiRj#FCa9_r;Q00iXT7odeid6NWu6QjHK}Yds zQ>fsD?8K4ewWYHHC5EZG&>KYWNL3rig)(MX^z)VX`~weSp@ZR|l8w6z3;xK$t0mKa zwY67dm^%l^;B3mas*3f{^qxLW6^suTX-tyFIi46M8(KFDP1En&mQXhCxhNo@OZ=NS z<}$z}i#AqWn(hNrKiT`!1;0_=MfFqC)rPQ{!9}41Jb!8X#%D()t7!stJU|#hWpAk9s&Bk z%((b;e)zjhixxTVa>{!-mJB}U8i4#k{WXqDQmE_8H;yg)D(%P$C zt8f)=9_QkyZYi|e-y+H{IP*A82FPQmg7%@2;t9ycphI=(_d1} zpPTrLAl{F^RLx%*__F%`br8?tZ-V$+d_^^XS4C-mZ{i<<_(%McfqypfdJvoOFMfZh zfAxTguLkk2__u2OJN_exXYrpV{!3B*TkZ5UMfsY6uPc52M>YSen*USHH&pY6YQCwO zZz-K_nnJVsMNFwMrP2^z5c~02Q~dl&fGlFDo=G=JRS;bgG^IL-YhsyFV@Rzc)tORn z$}$5_7!nG~a#>-@O10}MLslEI#*}}sDQgW`XUh5@hGc^&8%?=I?Hi#cvdNTNO}WjK z&8BQI<#toHn$n;)*k(whAx#3SE0J*A&bXaQIVnM?&rM#QIgs`yorD(~wY{V(s2l7# z-qU-k=iJbt{%BWk581lU+ZXM&xSg12i+XM>F|kij)0s@9JUihH+3~bvO0$2Uwy(eU zNdKW|^jzmrZX%GbO66-ob;sc0!-x9MMY~QPsstKH3dEBW6AtCA>rT28Z4<6N7I)e% zx%Tw5S$4$kO2|@j|o1Ac+RH{3c@|=X)r={FJ2a}f)@uWT0 zw}72H2kwp~V%~m1N5c{tEH;0AF=gA3z}J}^qmp&qv4qo;o*Hr70ed9wDCZ?d?f8)G z#?&}R^m&sp`hUYxDpSSelA3)t=Dt}o){iC=nuzS?e@wB#Z(jZ?9mG+?CG2} z=2%Xw;FgB$z6r-`8|?4ONr@%f4#(n-mSEUpV@frqODQX}WXwr<m#GZ=NP2u+WlY7H4(gLgPxU)W z_Zr$xZ+YELV#1qbEb}?mnM^Ao%;#g|B7fe^4p;fOirTIz5zE?0IHO8cDo~kBdxBL3 zb9&R>blRiS9eaw?6)}G0rVri|DrXZNl{iBVkvw>Ol@ zta1QSKjC=UMeYg5n@rM|Ym4|?XFN`6ZP_{UTaISV^BUQqTMBY^1IGQ0Hzqq0k|j72?~j@zCySn$NH`WRD?tS+ZB!E!ih`TXK)=x9~2!!@^JFXDqo_?ju0u>!d>$ zu`^a&O)SG=%qX5x`yWtEhb5hI(87oCVGA!|jxJD&w`hN#TXIMaTXIB>@?2WN086^$ zm?g)h+mI8M^hmEIeM;LWE2j?h_jL6fi43NgXpy4>1AP&V8j(`ih$JsMZp2Pd+mtiP zqareo3=uCG$s==wiy}v~10!QRh}_snTJf|-`r-~TLoG|iSW%I5L146%S*XM%-Ppr9 zkXpU420GHQxUSGZRz2mNNee%Zk602@R-Ts&mc)OB`B1Ocwo+`owL`;{B?)1v2Is+t zK);~QEt!^wa=BEzc5`7xZ5Dh6l39gva*83y5Z98Fu!{YI1BY9f*J-&}!k1sVybLZ0 zB8qys_3~7_btIM;YdvUtwl_2F5R~bCeHtyB<_2C?wGJMe?hFxhezSfaTCpjoXwUoe zxu$=-T_!N8$fcM!xkTV&sYoK}MN;YM=_GX+i;y-${D>SII-&FR5|J!hGOf9iQMJVb zsFc{3!#x$a%a+WjD%3#MdNBuUR&JDotGeuPYMx>wQ>|GP4YF54wl%P=+mdSAl8Q8J zN$u1BZ7b?p@~}KYEGbjrT?Y$ynGH)J*baYI=JtHulm5RYk{H>1z6CC%1Xfq8ot zyd8om$2;hZ+vzwHe_hdWSi-0Gs8M2Vm&B~=>hp)){Dm(tbzv;#ru4P*Gz-Z~YJYze zIOp$p%NiD6G{X($Z(M4wmgXjk1F?3&o+TH!5UuKW9!m3eI`62hW$roU@6@%lv?RW( zi%c!P?q%;pou#)>+TO)mrmL^0{)RIhYFJ;A61m%J+Ew1nk4rBPS*m)r#Zq1KhfMLs zvrnN(L6hZW$ds=khpWn6@|4fN<8yz7(Nx0(MQ$%%+&O8xQRUmjs8e!bI-t2#u2Y+) z@8YdP?eZrO-zi=?MG=V!W$W?<_p@Wil+ON3Zp>o>8uV>fm!eeiX-fKNJegA0CdMQ> zI_W5^G1xzvOnKQ}A3-qJvsI`}_D-f9g~O_-4!icml)lJKzo}eVOzHaGmMMQ50`#dJ zPb~;l?s}}MspU=G({o3yy0?0T!%o?$QAN3Q+rnG&zHG*qz)pBETkbMV|Efskw%hXm zD3uqWVv>Id+*fAJnMG@gcUknbSo59c=*L*%V)6n*zqgDZ&y;a(xyOidSjUW~esWn= z&O-GLZCpA>3do;*rZ;ph6)S(0ee=(fzs4t%qI*hIh3+X~m0HB3IT3&FhMF_i$Bc1kCZ6;@5&3S+=PJs*{_BVqjrDOb<}6DtUWM?(C{3V z4^!}pS*+{{2QpaI?rUrc`)0A4E??7bgnglK*vMdQ*q6b&cK?5}27JnFH`Qpv?qJoP z>Z(08VSm`nVB_%as*2|^bse{45P1qKKZZ@ATQj(A4x5KVTV`?l%d2WuR$a08)U2x3 z-|AJ>E3kE{>OIe)sqqu23~kGx@suVyd#XtZ+(1ZunpOs{tg87WngVDEo0Ti8GH8C` z=DYQpmJC|M{u_TV!~P7~T5h0`l2? z3fRl}edM@@?%&S@xtG-Y(2N7vi4M+mvOS0{97Z3G(BVfh#L*azvHFfPow}LcJq$}P zo*>85IEfFUA0H*>$1#9caf-4};|n;0FX1e{j0f-)oTGmhr}1^t-oRNAJRp9YlPcI^ zVMM3Ek5Zdjyn=V*M;O$dcovT{aScko!nr4yE)TNSe~f=sl=?ROID0|Ld;~v%pF}lv zyo~p-S3_%F!%xvxpGu5;O0kzqDfY4{RUy@Q67NH$sI<(j_p7M7$&G6a ztT(X3z%zdao;C1(1J4X|#U+~S8|b)6O#_P=2~js`P00)tT?~BS zCJU~9(MnWCRuqibOeVhXvrs8<3Jq}Pak}GR28T{G zhYo*da3plJ^3&+b;8;&{=(rkp`#2u144sIQ*zRi)&i7={+wKqh!hTNn3|BUV`Z734 zhTd1uf0Zi-)XKrqm0_Qh<8JrOVQ4sXN&(ngUZ#pBi{K=K+D}U#$}0%ve;l8nj>^MLsJKb-l{z4c*Gp2Z_nUNOEzDwGP{4y zUM*zIDt%JEmjQf|y1$QQ^b}$4nW9YDQP6&e&ShRSU}9%S3@3)$-94~?i#AT(NU>HstUebHebKmO=2 z(tq92*{t(k+B$vPixyk1c1+I+rotUm-P)H!YX=&JwNx^jbC9eK+adSvzD8AG zT>oE96YBp(P9peivtA_03JIBGHaDjU000e>FfTrTBB2xQXg*^=CsBkc28(7P2}y7u zKmsCgfaSDE2Y0t(Z;z5VJx(RXq}qwo6FVJJPO=psy*R!1>h#`26359uyQkBY1?kK8 zp}CzmZ~j;3y%`>P{NXDAR*3})o}pqho~c5`v*hq>Ioz$_IVvh7xdP8s@H_?2_u~bA zyigK<&Z~G4UhKz9{CKH?dsNg)##&sEi!W30a=b#pD^<*N$*)rJYTPSf?~}u8)mpA zj~w3X$3;Ibsi?&J@@i0aed`Q7%73*-Aog0HIBj;{&K>e$=T z7HL1Sucv+Qkand@a$tkN)K)W@vh}3BUyrAM z4S`U}_O|xkmaa&9TMnl#%d%%*S9@=cI=HBBnLaG+^odaii&sr4J1mR#S&FJ>brE z>aiq^@+J5yFf)9p)MQ7xZVeEx&SP1BK+Pg=*DZl+mm_92ZHvVXu2v6OCKv6Pk&+Yv z#WGF1Ek@poA>B$D{8*T;XEYvbYBduHJ=rgf-RR=ONOO)1SAG?9)<3uym1YU)qkvo5tzVP8Vw*mF+YWw6h|AZVn7c zW#@WDA>u4@UrmISRhc;OPDR#cmL|DO?zk!kLV% z>Pm8zUQoo|P#n(MtU~!RriDw`{BdTb)Ge10NyBd1x3`OHf^y~;5PQxgZT)P{9`c0p z5^a~+8rM^)Hskmjw=Bnh{;55-9zD5JA98YD!8Zg}g(r?`iK<&BwdqD7RC~;{ z6*b)So>_9fR!D(N0}qHc^Gq^s>irt_qDR9Mk=9@%rQs;(*U&_#Lc=%lE&9LsP%?)m zbMP4ovQBf^mZu50e2`h7;oJC*g70eh9==bWQv&6u(lNspSp9z-I}Ja7zz;S22tQWv z6Ah2zr_7@9L)59K1{p*RKf})z{6fPo@hc56JVnD0PH8xSrz-fhhTq_~0&_gf>XPL+ z9_Qh97tT=SmC~WVEA-$P|8CtLY)Pez1hdAHe7~2&9|Y<>n76W4rEE^5znE~YL4U-b z1ho7-qDk(~731Yj!v0x*!Cy4|6@Sz4cNyG&;F^Yi;u_1toy-eskw8_!mVe>ja^GVL z{-fb>{8ynMA;c6#lxe~z$`w(e2}SssPd7M0^wfAx>`f=_Si;CH5?@qmLX}$hj#GI} zR0&OBbE}?Ans%t)ppglNFcg*NZixO09XG8|)+Zs>`OtC8OoXC;Y)QxTlo6_5oT^_@ zkcZvJP8d;J6H`UC6j!5&X_}}N0Y%hlVmi{SG&errnwWuWikPX1SzZVA%QXV)j_OC~cxjw#N%>okUg6LtzEk&`>lNnC>M;-aFEEi>w%da4`gZuyEq; zOB;9~4itAnw-Br;X`z#9=Y<9r^_bFNc;C}%i)E8`_=doLUIlfmD|xOKlut*1VmMaN z^g~{0<0-AnCKjwzpiVo0r+eXgmPXTw!$76vmy@*p@J7?!Rt9Q^c&&YeD;~g2kp6H``Lzu zgJj^*Pv{KX?H=Ag9doP{nz7-dy8+ciy~)^F4X_*;oS93&Svi+iY46=_#TP!?G_0^d#!<-0~v z(KigG*%$O>;6D)bm0w0>Us<54r_UGAdNP=rLG?JfMv|vV@_|v*a%Z5qJXkLG)&+fy z8BA}k7{QEYC8&^EF^ZXFnU%rp41z(f%xU(22mQ-OFjr3IHCHYh!Te@5s5XvbL0_

_` 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4e1cc9d..d7e66b5 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 83f2acf..1b6c787 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,78 +17,113 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -97,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -105,84 +140,95 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=$((i+1)) + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 24467a1..ac1b06f 100755 --- a/gradlew.bat +++ b/gradlew.bat @@ -29,6 +29,9 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @@ -37,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -51,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -61,28 +64,14 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/settings.gradle.kts b/settings.gradle.kts index 89fd768..4a8d7f8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1 +1,9 @@ +pluginManagement { + val kotlinVersion: String by settings + + plugins { + id("org.jetbrains.kotlin.jvm").version(kotlinVersion) + } +} + rootProject.name = "mc-kotlin-plugin-template" diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index f8b6175..c9b4758 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,8 @@ name: KotlinPluginTemplate main: org.simplemc.plugintemplate.KotlinPluginTemplate -version: 0.1.0 -api-version: "1.15" +version: "${version}" +api-version: "${apiVersion}" website: https://github.com/SimpleMC/mc-kotlin-plugin-template author: tajobe +libraries: + - org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion} From acdda9d27d609f77a7b5b919187fc5392cd48785 Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Tue, 29 Mar 2022 11:02:12 -0400 Subject: [PATCH 6/9] New release workflow with automatic latest/snapshot releasing (#7) --- .github/workflows/build-workflow.yml | 32 ++++++++++++++++++++++++++ .github/workflows/pr-workflow.yml | 12 +--------- .github/workflows/release-workflow.yml | 22 ++++++++++-------- 3 files changed, 46 insertions(+), 20 deletions(-) create mode 100644 .github/workflows/build-workflow.yml diff --git a/.github/workflows/build-workflow.yml b/.github/workflows/build-workflow.yml new file mode 100644 index 0000000..615931e --- /dev/null +++ b/.github/workflows/build-workflow.yml @@ -0,0 +1,32 @@ +name: Build +on: + workflow_call: + outputs: + version: + description: Built version + value: ${{ jobs.build.outputs.version }} + +jobs: + build: + name: Gradle Build + runs-on: ubuntu-latest + outputs: + version: ${{ steps.version.outputs.version }} + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-java@v2 + with: + java-version: 17 + distribution: temurin + - uses: gradle/gradle-build-action@v2 + - name: Gradle Build + run: ./gradlew build + - name: Get Version + id: version + run: echo ::set-output name=version::"$(./gradlew --console plain --quiet currentVersion -Prelease.quiet)" + - name: Upload build + uses: actions/upload-artifact@v3 + with: + name: build + path: build/libs/*.jar + retention-days: 7 diff --git a/.github/workflows/pr-workflow.yml b/.github/workflows/pr-workflow.yml index 1b60a68..28d2147 100644 --- a/.github/workflows/pr-workflow.yml +++ b/.github/workflows/pr-workflow.yml @@ -3,14 +3,4 @@ on: pull_request jobs: build: - name: Gradle Build - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v2 - with: - java-version: 17 - distribution: temurin - - uses: gradle/gradle-build-action@v2 - with: - arguments: build + uses: ./.github/workflows/build-workflow.yml diff --git a/.github/workflows/release-workflow.yml b/.github/workflows/release-workflow.yml index 2ddd0a6..837f7c4 100644 --- a/.github/workflows/release-workflow.yml +++ b/.github/workflows/release-workflow.yml @@ -1,28 +1,32 @@ name: Release on: push: + branches: ['master', 'main'] # TODO: master/main tags: - "v[0-9]+.[0-9]+.[0-9]+" jobs: + build: + uses: ./.github/workflows/build-workflow.yml release: + needs: build name: Create Release runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: actions/setup-java@v2 + - name: Download build + uses: actions/download-artifact@v3 with: - java-version: 17 - distribution: temurin - - name: Gradle Build - uses: gradle/gradle-build-action@v2 - with: - arguments: build + name: build + path: build - name: Release uses: docker://antonyurchenko/git-release:v4 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - DRAFT_RELEASE: "true" + RELEASE_NAME: ${{ needs.build.outputs.version }} + PRE_RELEASE: ${{ github.ref_type == 'branch' }} + UNRELEASED: ${{ github.ref_type == 'branch' && 'update' || '' }} + UNRELEASED_TAG: latest-snapshot with: args: | - build/libs/*.jar + build/*.jar From cc93c533da43166fd03c7a826a92a8f379ffafb2 Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Sun, 22 May 2022 00:20:25 -0400 Subject: [PATCH 7/9] Bump dependencies --- build.gradle.kts | 4 ++-- gradle.properties | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 67dbd78..0eb0530 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -19,8 +19,8 @@ buildscript { plugins { kotlin("jvm") id("com.github.johnrengelman.shadow") version "7.1.2" - id("pl.allegro.tech.build.axion-release") version "1.13.6" - id("org.jlleitschuh.gradle.ktlint") version "10.2.1" + id("pl.allegro.tech.build.axion-release") version "1.13.7" + id("org.jlleitschuh.gradle.ktlint") version "10.3.0" } group = "org.simplemc" diff --git a/gradle.properties b/gradle.properties index 0d870d0..4a77d08 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ kotlin.code.style=official -kotlinVersion=1.6.10 +kotlinVersion=1.6.21 mcApiVersion=1.18 repoRef=SimpleMC/mc-kotlin-plugin-template From 9aa5a0d5ee1f6c6f6fa29f2afc50d29f0095a9a4 Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Fri, 3 Mar 2023 20:46:27 -0500 Subject: [PATCH 8/9] Chore: Update Action workflows, bump deps, update README (#8) Update Action workflows to include a flow for manual releasing and automated publishing Update Gradle dependencies to latest--Gradle wrapper, kotlin, plugins, spigot-api Update README to include some basic instructions for using the template repo and example plugins --- .github/workflows/build-workflow.yml | 9 ++-- .github/workflows/publish-workflow.yml | 36 +++++++++++++ .github/workflows/release-workflow.yml | 54 +++++++++++--------- README.md | 32 +++++++++++- build.gradle.kts | 61 +++++++++++------------ gradle.properties | 4 +- gradle/wrapper/gradle-wrapper.jar | Bin 59821 -> 61608 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 18 +++++-- gradlew.bat | 15 +++--- 10 files changed, 158 insertions(+), 74 deletions(-) create mode 100644 .github/workflows/publish-workflow.yml diff --git a/.github/workflows/build-workflow.yml b/.github/workflows/build-workflow.yml index 615931e..34003af 100644 --- a/.github/workflows/build-workflow.yml +++ b/.github/workflows/build-workflow.yml @@ -9,24 +9,23 @@ on: jobs: build: name: Gradle Build - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 outputs: version: ${{ steps.version.outputs.version }} steps: - uses: actions/checkout@v3 - - uses: actions/setup-java@v2 with: - java-version: 17 - distribution: temurin + fetch-depth: 0 - uses: gradle/gradle-build-action@v2 - name: Gradle Build run: ./gradlew build - name: Get Version id: version - run: echo ::set-output name=version::"$(./gradlew --console plain --quiet currentVersion -Prelease.quiet)" + run: echo "version=$(./gradlew --console plain --quiet currentVersion -Prelease.quiet)" >> $GITHUB_OUTPUT - name: Upload build uses: actions/upload-artifact@v3 with: name: build path: build/libs/*.jar retention-days: 7 + if-no-files-found: error diff --git a/.github/workflows/publish-workflow.yml b/.github/workflows/publish-workflow.yml new file mode 100644 index 0000000..7232470 --- /dev/null +++ b/.github/workflows/publish-workflow.yml @@ -0,0 +1,36 @@ +name: Publish +on: + push: + branches: ['master', 'main'] + tags: + - "v[0-9]+.[0-9]+.[0-9]+" + +jobs: + build: + uses: ./.github/workflows/build-workflow.yml + release: + needs: build + name: Create Release + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - uses: gradle/gradle-build-action@v2 + - name: Download build + uses: actions/download-artifact@v3 + with: + name: build + path: build + - name: Release + uses: docker://antonyurchenko/git-release:v5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RELEASE_NAME: ${{ needs.build.outputs.version }} + PRE_RELEASE: ${{ github.ref_type == 'branch' }} + UNRELEASED: ${{ github.ref_type == 'branch' && 'update' || '' }} + UNRELEASED_TAG: latest-snapshot + ALLOW_EMPTY_CHANGELOG: ${{ github.ref_type == 'branch' && 'true' || 'false' }} + with: + args: | + build/*.jar diff --git a/.github/workflows/release-workflow.yml b/.github/workflows/release-workflow.yml index 837f7c4..f9ea281 100644 --- a/.github/workflows/release-workflow.yml +++ b/.github/workflows/release-workflow.yml @@ -1,32 +1,38 @@ -name: Release +name: Create Release + on: - push: - branches: ['master', 'main'] # TODO: master/main - tags: - - "v[0-9]+.[0-9]+.[0-9]+" + workflow_dispatch: + inputs: + versionIncrementer: + type: choice + description: Override the default version incrementer according to https://axion-release-plugin.readthedocs.io/en/latest/configuration/version/#incrementing + default: default + options: + - default + - incrementPatch + - incrementMinor + - incrementMajor + - incrementPrerelease jobs: - build: - uses: ./.github/workflows/build-workflow.yml release: - needs: build - name: Create Release - runs-on: ubuntu-latest + name: Gradle Release + runs-on: ubuntu-22.04 + outputs: + version: ${{ steps.version.outputs.version }} steps: - uses: actions/checkout@v3 - - name: Download build - uses: actions/download-artifact@v3 with: - name: build - path: build - - name: Release - uses: docker://antonyurchenko/git-release:v4 + token: "${{ secrets.PAT }}" + fetch-depth: 0 + - uses: gradle/gradle-build-action@v2 + - name: Gradle Release + if: ${{ inputs.versionIncrementer == 'default' }} env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - RELEASE_NAME: ${{ needs.build.outputs.version }} - PRE_RELEASE: ${{ github.ref_type == 'branch' }} - UNRELEASED: ${{ github.ref_type == 'branch' && 'update' || '' }} - UNRELEASED_TAG: latest-snapshot - with: - args: | - build/*.jar + DEPLOY_KEY: ${{ secrets.COMMIT_KEY }} + run: ./gradlew release + - name: Gradle Release w/ Increment Override + if: ${{ inputs.versionIncrementer != 'default' }} + env: + DEPLOY_KEY: ${{ secrets.COMMIT_KEY }} + run: ./gradlew release -Prelease.versionIncrementer=${{ inputs.versionIncrementer }} diff --git a/README.md b/README.md index 55ba7b3..2c361e5 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,39 @@ Opinionated template/starter for creating Minecraft plugins in Kotlin using the ## Features - Gradle axion-release-plugin for managing semver - - automatic updating of `CHANGELOG.md` and `main/resources/plugin.yml` when a release is made + - automatic updating of `CHANGELOG.md` and `main/resources/plugin.yml` when a release is made - Github Actions to build PRs and automatically create Github releases when a release tag is pushed + - Manual Create Release pipeline to increment semver tag and trigger publishing a new version + - Requires a secret named `PAT` with a GitHub PAT with code read/write permission to the repository - [`ktlint`](https://github.com/JLLeitschuh/ktlint-gradle) Gradle plugin - Gradle build generates a standard plugin jar which will download dependencies declared as [`libraries`](https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/plugin/PluginDescriptionFile.html#getLibraries()) in `plugin.yml` and an "offline"/shadowed jar containing necessary dependencies + +## Usage + +1. Use the template to create a new repository: [Create a new repository](https://github.com/SimpleMC/mc-kotlin-plugin-template/generate) +2. Change template repository references + - `settings.gradle.kts` -> set `rootProject.name` + - `gradle.properties` -> set `repoRef` + - `build.gradle.kts` -> set `group` + - `CHANGELOG.md` -> update links to `SimpleMC/mc-kotlin-plugin-template` to match `repoRef` + - `src/main/resources/plugin.yml` -> set `name`, `main`, `website`, `author` + - `src/main/kotlin/org/simplemc/plugintemplate/KotlinPluginTemplate.kt` -> Move packages/rename for your plugin + - `README.md` -> Update +3. To use the Create Release automation, add PAT secret + 1. Create a Personal Access Token: https://github.com/settings/personal-access-tokens/new + - Repository Access: "Only select repositories" and pick the plugin template fork + - Repository Permissions: Contents Read & write + - This is so the automation can create release commits + 2. Add the PAT as an Actions secret to your new repository: `https://github.com//settings/secrets/actions/new` + - Name: `PAT` + - Secret Contents: Paste the Personal Access Token you created in the previous step + +## Examples + +Several SimpleMC plugins are built off of this template or were the impetus for it: + +- [SimpleNPCs](https://github.com/SimpleMC/SimpleNPCs) - Simple command-based NPC interactions +- [SimpleHealthbars2](https://github.com/SimpleMC/SimpleHealthbars2) - Simple, easy-to-use healthbar plugin with optional player and mob healthbars +- [SimpleAnnounce](https://github.com/SimpleMC/SimpleAnnounce) - SimpleAnnounce is a simple and easy to use, yet powerful automated announcement plugin for the Bukkit Minecraft API. \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 0eb0530..6da362d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,6 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocatio import org.yaml.snakeyaml.DumperOptions import org.yaml.snakeyaml.Yaml import pl.allegro.tech.build.axion.release.domain.hooks.HookContext -import pl.allegro.tech.build.axion.release.domain.hooks.HooksConfig import java.time.OffsetDateTime import java.time.ZoneOffset import java.time.format.DateTimeFormatter @@ -12,15 +11,15 @@ buildscript { mavenCentral() } dependencies { - classpath("org.yaml:snakeyaml:1.30") + classpath("org.yaml:snakeyaml:2.0") } } plugins { kotlin("jvm") - id("com.github.johnrengelman.shadow") version "7.1.2" - id("pl.allegro.tech.build.axion-release") version "1.13.7" - id("org.jlleitschuh.gradle.ktlint") version "10.3.0" + id("com.github.johnrengelman.shadow") version "8.0.0" + id("pl.allegro.tech.build.axion-release") version "1.14.4" + id("org.jlleitschuh.gradle.ktlint") version "11.2.0" } group = "org.simplemc" @@ -32,29 +31,29 @@ val repoRef: String by project scmVersion { versionIncrementer("incrementMinorIfNotOnRelease", mapOf("releaseBranchPattern" to "release/.+")) - hooks( - closureOf { - pre( - "fileUpdate", - mapOf( - "file" to "CHANGELOG.md", - "pattern" to KotlinClosure2({ v, _ -> - "\\[Unreleased\\]([\\s\\S]+?)\\n(?:^\\[Unreleased\\]: https:\\/\\/github\\.com\\/$repoRef\\/compare\\/[^\\n]*\$([\\s\\S]*))?\\z" - }), - "replacement" to KotlinClosure2({ v, c -> - """ - \[Unreleased\] - - ## \[$v\] - ${currentDateString()}$1 - \[Unreleased\]: https:\/\/github\.com\/$repoRef\/compare\/v$v...HEAD - \[$v\]: https:\/\/github\.com\/$repoRef\/${if (c.previousVersion == v) "releases/tag/v$v" else "compare/v${c.previousVersion}...v$v"}${'$'}2 - """.trimIndent() - }) - ) + hooks { + // FIXME - workaround for Kotlin DSL issue https://github.com/allegro/axion-release-plugin/issues/500 + pre( + "fileUpdate", + mapOf( + "file" to "CHANGELOG.md", + "pattern" to KotlinClosure2({ v, _ -> + "\\[Unreleased\\]([\\s\\S]+?)\\n(?:^\\[Unreleased\\]: https:\\/\\/github\\.com\\/$repoRef\\/compare\\/[^\\n]*\$([\\s\\S]*))?\\z" + }), + "replacement" to KotlinClosure2({ v, c -> + """ + \[Unreleased\] + + ## \[$v\] - ${currentDateString()}$1 + \[Unreleased\]: https:\/\/github\.com\/$repoRef\/compare\/v$v...HEAD + \[$v\]: https:\/\/github\.com\/$repoRef\/${if (c.previousVersion == v) "releases/tag/v$v" else "compare/v${c.previousVersion}...v$v"}${'$'}2 + """.trimIndent() + }) ) - pre("commit") - } - ) + ) + + pre("commit") + } } fun currentDateString() = OffsetDateTime.now(ZoneOffset.UTC).toLocalDate().format(DateTimeFormatter.ISO_DATE) @@ -78,7 +77,7 @@ dependencies { tasks { wrapper { - gradleVersion = "7.4.1" + gradleVersion = "8.0.1" distributionType = Wrapper.DistributionType.ALL } @@ -99,8 +98,8 @@ tasks { val yamlDumpOptions = // make it pretty for the people DumperOptions().also { - it.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK) - it.setPrettyFlow(true) + it.defaultFlowStyle = DumperOptions.FlowStyle.BLOCK + it.isPrettyFlow = true } val yaml = Yaml(yamlDumpOptions) val pluginYml: Map = yaml.load(file("$resourcesDir/plugin.yml").inputStream()) @@ -123,7 +122,7 @@ tasks { // avoid classpath conflicts/pollution via relocation val configureShadowRelocation by registering(ConfigureShadowRelocation::class) { target = shadowJar.get() - prefix = "${project.group}.${project.name.toLowerCase()}.libraries" + prefix = "${project.group}.${project.name.lowercase()}.libraries" } build { diff --git a/gradle.properties b/gradle.properties index 4a77d08..e97d4f4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ kotlin.code.style=official -kotlinVersion=1.6.21 -mcApiVersion=1.18 +kotlinVersion=1.8.10 +mcApiVersion=1.19 repoRef=SimpleMC/mc-kotlin-plugin-template diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 41d9927a4d4fb3f96a785543079b8df6723c946b..ccebba7710deaf9f98673a68957ea02138b60d0a 100644 GIT binary patch delta 39692 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 GdG|kGW5mAz delta 37934 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d7e66b5..6ec1567 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.1-all.zip +networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 1b6c787..79a61d4 100755 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,10 +80,10 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' @@ -143,12 +143,16 @@ fi if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -205,6 +209,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index ac1b06f..6689b85 100755 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal From d56a787a795e02144158a5f30e7f963dfdc9ba30 Mon Sep 17 00:00:00 2001 From: Taylor Becker Date: Sat, 10 May 2025 14:46:55 -0400 Subject: [PATCH 9/9] Formatting/linting --- .editorconfig | 14 ++++++++++++++ build.gradle.kts | 2 +- .../kotlin/org/simplemc/simplenpcs/SimpleNPCs.kt | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..941d18c --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +root = true + +[*] +charset = utf-8 +indent_size = 4 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.{kt,kts}] +ktlint_code_style = intellij_idea + +[*{.yml,yaml}] +indent_style = space +indent_size = 2 diff --git a/build.gradle.kts b/build.gradle.kts index 3aaa850..c670f01 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -21,7 +21,7 @@ scmVersion { // FIXME - workaround for Kotlin DSL issue https://github.com/allegro/axion-release-plugin/issues/500 val changelogPattern = "\\[Unreleased\\]([\\s\\S]+?)\\n" + - "(?:^\\[Unreleased\\]: https:\\/\\/github\\.com\\/(\\S+\\/\\S+)\\/compare\\/[^\\n]*\$([\\s\\S]*))?\\z" + "(?:^\\[Unreleased\\]: https:\\/\\/github\\.com\\/(\\S+\\/\\S+)\\/compare\\/[^\\n]*\$([\\s\\S]*))?\\z" pre( "fileUpdate", mapOf( diff --git a/src/main/kotlin/org/simplemc/simplenpcs/SimpleNPCs.kt b/src/main/kotlin/org/simplemc/simplenpcs/SimpleNPCs.kt index e43218b..b80878d 100644 --- a/src/main/kotlin/org/simplemc/simplenpcs/SimpleNPCs.kt +++ b/src/main/kotlin/org/simplemc/simplenpcs/SimpleNPCs.kt @@ -109,7 +109,7 @@ class SimpleNPCs : JavaPlugin(), Listener { awaitingBinds.remove(sender)?.let { (_, command) -> sender.sendMessage( command?.let { "NPC binding of command `$it` timed out" } - ?: "NPC unbinding timed out" + ?: "NPC unbinding timed out", ) } }