Compare commits

...

6 Commits

Author SHA1 Message Date
Vladimir Sitnikov c786a81b5a
Merge 1366ed47fb into 83e211fed7 2025-07-10 12:47:14 +03:00
Milamber 83e211fed7
Move to Java 17 (migrate source code from Java 8) (#6462)
Validate Gradle Wrapper / Validation (push) Has been cancelled Details
CI / Matrix Preparation (push) Has been cancelled Details
CI / Error Prone (JDK 17) (push) Has been cancelled Details
Release Drafter / Update Release Draft (push) Has been cancelled Details
CI / ${{ matrix.name }} (push) Has been cancelled Details
* Prepare to use Java 17 as minimal version

* See #6219 Pattern Matching for instanceof uses (Java 14/16)

* See #6219 - Implicit Typing with var (Java 10)

* See #6219 - Using Switch Expressions / yield Keyword (Java 14)

* See #6219 - Using Text Blocks (Java 15)

* See #6219 - some tunning / formating style

* See #6219 - tunning code

* See #6219 - Update Java argline params / remove java 8 / 9 args/comments

* See #6219 - formating code

* Remove not standard options for Java 17

* See #6219 - refactor CompOper to an enum

* See #6219 - fix unnecessary yield usage in the switch expression

* See #6219 - Optimize the code, fix formatting issue
2025-07-07 09:43:25 +01:00
Vladimir Sitnikov 1366ed47fb WIP: rework openrewrite-gradle-plugin 2024-01-11 10:55:25 +03:00
Vladimir Sitnikov 805f115414 WIP: rewrite 2024-01-09 13:13:42 +03:00
Vladimir Sitnikov d21c15bfc1 chore: bump com.github.autostyle to 4.0 to support Java 17
"removeUnusedImports" in google-java-format is not supported with Java 17+ (it requires add-opens),
so move the fix to OpenRewrite
2024-01-09 11:48:52 +03:00
Vladimir Sitnikov 36a0a592b2 chore: add OpenRewrite for automatic code style fixes 2024-01-09 11:46:56 +03:00
139 changed files with 2224 additions and 521 deletions

View File

@ -115,18 +115,19 @@ if [ -z "$JAVA_HOME" ]; then
JAVA_HOME="$JRE_HOME"
fi
#--add-opens if JAVA 9
JAVA9_OPTS=
# Module access for modern Java versions (required for JMeter components)
JAVA_OPTS="--add-opens java.desktop/sun.awt=ALL-UNNAMED --add-opens java.desktop/sun.swing=ALL-UNNAMED --add-opens java.desktop/javax.swing.text.html=ALL-UNNAMED --add-opens java.desktop/java.awt=ALL-UNNAMED --add-opens java.desktop/java.awt.font=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED --add-opens=java.desktop/sun.awt.X11=ALL-UNNAMED --add-opens=java.desktop/sun.awt.shell=ALL-UNNAMED"
# Minimal version to run JMeter
MINIMAL_VERSION=8
MINIMAL_VERSION=17
# Check if version is from OpenJDK or Oracle Hotspot JVM prior to 9 containing 1.${version}.x
# Check if version meets the minimal requirement
CURRENT_VERSION=`"${JAVA_HOME}/bin/java" -version 2>&1 | awk -F'"' '/version/ {gsub("^1[.]", "", $2); gsub("[^0-9].*$", "", $2); print $2}'`
# Check if Java is present and the minimal version requirement
if [ "$CURRENT_VERSION" -gt "$MINIMAL_VERSION" ]; then
JAVA9_OPTS="--add-opens java.desktop/sun.awt=ALL-UNNAMED --add-opens java.desktop/sun.swing=ALL-UNNAMED --add-opens java.desktop/javax.swing.text.html=ALL-UNNAMED --add-opens java.desktop/java.awt=ALL-UNNAMED --add-opens java.desktop/java.awt.font=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED --add-opens=java.desktop/sun.awt.X11=ALL-UNNAMED --add-opens=java.desktop/sun.awt.shell=ALL-UNNAMED"
# Check if Java is present and meets the minimal version requirement
if [ "$CURRENT_VERSION" -lt "$MINIMAL_VERSION" ]; then
echo "ERROR: Java version $CURRENT_VERSION is too low. JMeter requires Java $MINIMAL_VERSION or higher."
exit 1
fi
: "${JMETER_OPTS:=""}"
@ -169,15 +170,19 @@ esac
# Default to en_EN
: "${JMETER_LANGUAGE:="-Duser.language=en -Duser.region=EN"}"
# Uncomment this to generate GC verbose file with Java prior to 9
# VERBOSE_GC="-verbose:gc -Xloggc:gc_jmeter_%p.log -XX:+PrintGCDetails -XX:+PrintGCCause -XX:+PrintTenuringDistribution -XX:+PrintHeapAtGC -XX:+PrintGCApplicationConcurrentTime -XX:+PrintAdaptiveSizePolicy -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps"
# Legacy GC verbose options removed (Java 8/9 support discontinued)
# Uncomment this to generate GC verbose file with Java 9 and above
# VERBOSE_GC="-Xlog:gc*,gc+age=trace,gc+heap=debug:file=gc_jmeter_%p.log"
# Optimized GC logging for Java 17 with structured output and performance analysis
# Uncomment to enable comprehensive GC logging with rotation and detailed metrics
# VERBOSE_GC="-Xlog:gc,gc+heap,gc+regions,gc+refine,gc+phases:gc_jmeter_%p_%t.log:time,level,tags:filecount=5,filesize=50M"
# Alternative: Minimal GC logging for production (uncomment if needed)
# VERBOSE_GC="-Xlog:gc:gc_jmeter_%p.log:time"
# Docker support for Java 17+
# Modern container memory detection is automatic in Java 17+
# RUN_IN_DOCKER="-XX:+UseContainerSupport"
# Uncomment this if you run JMeter in DOCKER (need Java SE 8u131 or JDK 9)
# see https://blogs.oracle.com/java-platform-group/java-se-support-for-docker-cpu-and-memory-limits
# RUN_IN_DOCKER="-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap"
# Finally, some tracing to help in case things go astray:
# You may want to add those settings:
@ -191,7 +196,7 @@ SYSTEM_PROPS="-Djava.security.egd=file:/dev/urandom"
SERVER="-server"
if [ -z "${JMETER_COMPLETE_ARGS}" ]; then
ARGS="$JAVA9_OPTS $SERVER $DUMP $HEAP $VERBOSE_GC $GC_ALGO $SYSTEM_PROPS $JMETER_LANGUAGE $RUN_IN_DOCKER"
ARGS="$JAVA_OPTS $SERVER $DUMP $HEAP $VERBOSE_GC $GC_ALGO $SYSTEM_PROPS $JMETER_LANGUAGE $RUN_IN_DOCKER"
else
ARGS=""
fi

View File

@ -78,12 +78,19 @@ if not defined JMETER_LANGUAGE (
)
rem Minimal version to run JMeter
set MINIMAL_VERSION=1.8.0
set MINIMAL_VERSION=17.0.0
rem --add-opens if JAVA 9
set JAVA9_OPTS=
rem Optimized GC logging for Java 17 with structured output and performance analysis
rem Uncomment to enable comprehensive GC logging with rotation and detailed metrics
rem set VERBOSE_GC=-Xlog:gc,gc+heap,gc+regions,gc+refine,gc+phases:gc_jmeter_%%p_%%t.log:time,level,tags:filecount=5,filesize=50M
rem Alternative: Minimal GC logging for production (uncomment if needed)
rem set VERBOSE_GC=-Xlog:gc:gc_jmeter_%%p.log:time
rem Module access for modern Java versions (required for JMeter components)
set JAVA_OPTS=--add-opens java.desktop/sun.awt=ALL-UNNAMED --add-opens java.desktop/sun.swing=ALL-UNNAMED --add-opens java.desktop/javax.swing.text.html=ALL-UNNAMED --add-opens java.desktop/java.awt=ALL-UNNAMED --add-opens java.desktop/java.awt.font=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED --add-opens=java.desktop/sun.awt.shell=ALL-UNNAMED
for /f "tokens=3" %%g in ('java -version 2^>^&1 ^| findstr /i "version"') do (
rem @echo Debug Output: %%g
@ -95,36 +102,24 @@ if not defined JAVAVER (
goto pause
)
rem Check if version is from OpenJDK or Oracle Hotspot JVM prior to 9 containing 1.${version}.x
rem JAVAVER will be equal to "9.0.4" (quotes are part of the value) for Oracle Java 9
rem JAVAVER will be equal to "1.8.0_161" (quotes are part of the value) for Oracle Java 8
rem so we extract 2 chars starting from index 1
IF "%JAVAVER:~1,2%"=="1." (
set JAVAVER=%JAVAVER:"=%
for /f "delims=. tokens=1-3" %%v in ("%JAVAVER%") do (
set current_minor=%%w
)
) else (
rem Java 9 at least
set current_minor=9
set JAVA9_OPTS=--add-opens java.desktop/sun.awt=ALL-UNNAMED --add-opens java.desktop/sun.swing=ALL-UNNAMED --add-opens java.desktop/javax.swing.text.html=ALL-UNNAMED --add-opens java.desktop/java.awt=ALL-UNNAMED --add-opens java.desktop/java.awt.font=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED --add-opens=java.desktop/sun.awt.shell=ALL-UNNAMED
rem Extract major version number from Java version string
for /f "delims=. tokens=1" %%v in ("%JAVAVER:~1,-1%") do (
set current_major=%%v
)
for /f "delims=. tokens=1-3" %%v in ("%MINIMAL_VERSION%") do (
set minimal_minor=%%w
rem Extract minimal major version
for /f "delims=. tokens=1" %%v in ("%MINIMAL_VERSION%") do (
set minimal_major=%%v
)
if not defined current_minor (
if not defined current_major (
@echo Not able to find Java executable or version. Please check your Java installation.
set ERRORLEVEL=2
goto pause
)
rem @echo Debug: CURRENT=%current_minor% - MINIMAL=%minimal_minor%
if %current_minor% LSS %minimal_minor% (
@echo Error: Java version -- %JAVAVER% -- is too low to run JMeter. Needs a Java version greater than or equal to %MINIMAL_VERSION%
if %current_major% LSS %minimal_major% (
@echo Error: Java version -- %JAVAVER% -- is too low to run JMeter. Needs Java %MINIMAL_VERSION% or higher.
set ERRORLEVEL=3
goto pause
)
@ -151,13 +146,7 @@ if not defined HEAP (
set HEAP=-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m
)
rem Uncomment this to generate GC verbose file with Java prior to 9
rem set VERBOSE_GC=-verbose:gc -Xloggc:gc_jmeter_%%p.log -XX:+PrintGCDetails -XX:+PrintGCCause -XX:+PrintTenuringDistribution -XX:+PrintHeapAtGC -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps -XX:+PrintAdaptiveSizePolicy
rem Uncomment this to generate GC verbose file with Java 9 and above
rem set VERBOSE_GC=-Xlog:gc*,gc+age=trace,gc+heap=debug:file=gc_jmeter_%%p.log
rem You may want to add those settings
rem -XX:+ParallelRefProcEnabled -XX:+PerfDisableSharedMem
rem Legacy GC verbose options removed (Java 8/9 support discontinued)
if not defined GC_ALGO (
set GC_ALGO=-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=20
)
@ -167,9 +156,9 @@ set SYSTEM_PROPS=-Djava.security.egd=file:/dev/urandom
rem Always dump on OOM (does not cost anything unless triggered)
set DUMP=-XX:+HeapDumpOnOutOfMemoryError
rem Uncomment this if you run JMeter in DOCKER (need Java SE 8u131 or JDK 9)
rem see https://blogs.oracle.com/java-platform-group/java-se-support-for-docker-cpu-and-memory-limits
rem set RUN_IN_DOCKER=-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap
rem Docker support for Java 17+
rem Modern container memory detection is automatic in Java 17+
rem set RUN_IN_DOCKER=-XX:+UseContainerSupport
rem Additional settings that might help improve GUI performance on some platforms
rem See: http://www.oracle.com/technetwork/java/perf-graphics-135933.html
@ -188,7 +177,7 @@ if not defined DDRAW (
rem Collect the settings defined above
if not defined JMETER_COMPLETE_ARGS (
set ARGS=%JAVA9_OPTS% %DUMP% %HEAP% %VERBOSE_GC% %GC_ALGO% %DDRAW% %SYSTEM_PROPS% %JMETER_LANGUAGE% %RUN_IN_DOCKER%
set ARGS=%JAVA_OPTS% %DUMP% %HEAP% %VERBOSE_GC% %GC_ALGO% %DDRAW% %SYSTEM_PROPS% %JMETER_LANGUAGE% %RUN_IN_DOCKER%
) else (
set ARGS=
)

View File

@ -90,14 +90,17 @@ fi
JAVA9_OPTS=
# Minimal version to run JMeter
MINIMAL_VERSION=8
MINIMAL_VERSION=17
# Check if version is from OpenJDK or Oracle Hotspot JVM prior to 9 containing 1.${version}.x
CURRENT_VERSION=`"${JAVA_HOME}/bin/java" -version 2>&1 | awk -F'"' '/version/ {gsub("^1[.]", "", $2); gsub("[^0-9].*$", "", $2); print $2}'`
# Check if Java is present and the minimal version requirement
if [ "$CURRENT_VERSION" -gt "$MINIMAL_VERSION" ]; then
if [ "$CURRENT_VERSION" -ge "$MINIMAL_VERSION" ]; then
JAVA9_OPTS="--add-opens java.desktop/sun.awt=ALL-UNNAMED --add-opens java.desktop/sun.swing=ALL-UNNAMED --add-opens java.desktop/javax.swing.text.html=ALL-UNNAMED --add-opens java.desktop/java.awt=ALL-UNNAMED --add-opens java.desktop/java.awt.font=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED --add-opens=java.desktop/sun.awt.X11=ALL-UNNAMED --add-opens=java.desktop/sun.awt.shell=ALL-UNNAMED"
else
echo "JMeter requires Java $MINIMAL_VERSION or later. Current Java version is $CURRENT_VERSION"
exit 1
fi
# Don't add additional arguments to the JVM start, except those needed for Java 9

View File

@ -82,6 +82,10 @@ buildParameters {
defaultValue.set(false)
description.set("Skip AutoStyle verifications")
}
bool("skipOpenrewrite") {
defaultValue.set(false)
description.set("Skip OpenRewrite processing")
}
bool("skipCheckstyle") {
defaultValue.set(false)
description.set("Skip Checkstyle verifications")

View File

@ -17,7 +17,7 @@
plugins {
`embedded-kotlin` apply false
id("com.github.autostyle") version "3.2"
id("com.github.autostyle") version "4.0"
}
allprojects {

View File

@ -6,16 +6,22 @@
<trusted-key id='dcba03381ef6c89096acd985ac5ec74981f9cda6' group='com.beust' />
<trusted-key id='28118c070cb22a0175a2e8d43d12ca2ac19f3181' group='com.fasterxml.jackson.core' />
<trusted-key id='8a10792983023d5d14c93b488d7f1bec1e2ecae7' group='com.fasterxml.jackson.core' />
<trusted-key id='28118c070cb22a0175a2e8d43d12ca2ac19f3181' group='com.fasterxml.jackson.dataformat' />
<trusted-key id='8a10792983023d5d14c93b488d7f1bec1e2ecae7' group='com.fasterxml.jackson.dataformat' />
<trusted-key id='28118c070cb22a0175a2e8d43d12ca2ac19f3181' group='com.fasterxml.jackson.datatype' />
<trusted-key id='28118c070cb22a0175a2e8d43d12ca2ac19f3181' group='com.fasterxml.jackson.module' />
<trusted-key id='8a10792983023d5d14c93b488d7f1bec1e2ecae7' group='com.fasterxml.jackson.module' />
<trusted-key id='28118c070cb22a0175a2e8d43d12ca2ac19f3181' group='com.fasterxml.woodstox' />
<trusted-key id='8a10792983023d5d14c93b488d7f1bec1e2ecae7' group='com.fasterxml.woodstox' />
<trusted-key id='d112630c899f508198c09018105cb91cac2aee0e' group='com.github.autostyle' />
<trusted-key id='635ee627345f3c1dd422b2e207d3516820bcf6b1' group='com.github.ben-manes.caffeine' />
<trusted-key id='253e8e4c6fb28d11748115c1249dee8e2c07a0a2' group='com.github.javaparser' />
<trusted-key id='9857c388d7d1d9d031274cd0a5def5a76f94a471' group='com.github.spotbugs.snom' />
<trusted-key id='d112630c899f508198c09018105cb91cac2aee0e' group='com.github.vlsi.gradle' />
<trusted-key id='7616eb882daf57a11477aaf559a252fb1199d873' group='com.google.code.findbugs' />
<trusted-key id='afcc4c7594d09e2182c60e0f7a01b0f236e5430f' group='com.google.code.gson' />
<trusted-key id='7615ad56144df2376f49d98b1669c4bb543e0445' group='com.google.errorprone' />
<trusted-key id='e77417ac194160a3fabd04969a259c7ee636c5ed' group='com.google.errorprone' />
<trusted-key id='f05e5f90e43e837f9dd8c781bf935c771a8474f8' group='com.google.errorprone' />
<trusted-key id='694621a7227d8d5289699830abe9f3126bb741c1' group='com.google.guava' />
<trusted-key id='bdb5fa4fe719d787fb3d3197f6d4a1d411e9d1ae' group='com.google.guava' />
@ -30,8 +36,13 @@
<trusted-key id='636de9055c4c75c7bd9830771241bc872c5e4ec0' group='commons-lang' />
<trusted-key id='b920d295bf0e61cb4cf0896c33cd6733af5ec452' group='commons-logging' />
<trusted-key id='0186f8b24c5bc02c94a0e0e486f75e83e1ee085f' group='de.thetaphi' />
<trusted-key id='cde577234159e222bc56e50f9c61220417aaa02e' group='dev.failsafe' />
<trusted-key id='aa417737bd805456db3cbdde6601e5c08dccbb96' group='info.picocli' />
<trusted-key id='1ab9bdf40ed49debb5caaded5b30d3b10694f057' group='io.codearte.gradle.nexus' />
<trusted-key id='1f47744c9b6e14f2049c2857f1f111af65925306' group='io.github.classgraph' />
<trusted-key id='ed09733fa05dedf15100abeb32bbf14af07ca77b' group='io.github.fastfilter' />
<trusted-key id='48b086a7d843cfa258e83286928fbf39003c0425' group='io.micrometer' />
<trusted-key id='7119b89feb81209430e65c62c2ad9c8a7d4e988a' group='io.quarkus.gizmo' />
<trusted-key id='6dd3b8c64ef75253beb2c53ad908a43fb7ec07ac' group='jakarta.activation' />
<trusted-key id='fc411cd3cb7dcb0abc9801058118b3bcdb1a5000' group='jakarta.xml.bind' />
<trusted-key id='ea23db1360d9029481e7f2efecdfea3cb4493b94' group='jline' />
@ -40,8 +51,10 @@
<trusted-key id='517b94f8d0a46317a28d8ab30da8a5ec02d11ead' group='net.sf.jopt-simple' />
<trusted-key id='a1885c07a3204611fb184ef7098a31f381819057' group='net.sourceforge.nekohtml' />
<trusted-key id='124dac8350968ec2a8260584ee8ecbbbc188fd5d' group='org.ajoberstar.grgit' />
<trusted-key id='5719e50eac5a4b1dd390b72c2a742740e08e7f8d' group='org.antlr' />
<trusted-key id='8da70c00df7af1b0d2f9dc74ddbcc1270a29d081' group='org.apache.ant' />
<trusted-key id='12d16069219c90212a974d119ae296fd02e9f65b' group='org.apache.commons' />
<trusted-key id='2db4f1ef0fa761ecc4ea935c86fdc7e2a11262cb' group='org.apache.commons' />
<trusted-key id='41a1a08c62fca78b79d3081164a16faaec16a4be' group='org.apache.commons' />
<trusted-key id='0785b3eff60b1b1bea94e0bb7c25280eae63ebe5' group='org.apache.httpcomponents' />
<trusted-key id='08f0aab4d0c1a4bdde340765b341ddb020fcb6ab' group='org.bouncycastle' />
@ -55,7 +68,9 @@
<trusted-key id='1bd97a6a154e7810ee0bc832e2f38302c8075e3d' group='org.gradle.kotlin' />
<trusted-key id='66d7cbff956830fe9f5a723afe6c7d77a1ce15a6' group='org.gradlex' />
<trusted-key id='4db1a49729b053caf015cee9a6adfc93ef34893e' group='org.hamcrest' />
<trusted-key id='e113159331a1f87bfc2a93d0960d2e8635a91268' group='org.hdrhistogram' />
<trusted-key id='2e3a1affe42b5f53af19f780bcf4173966770193' group='org.jetbrains' />
<trusted-key id='33fd4bfd33554634053d73c0c2148900bcd3c2af' group='org.jetbrains' />
<trusted-key id='e62231331bca7e1f292c9b88c1b12a5d99c0729d' group='org.jetbrains' />
<trusted-key id='98465301a4939c0279f2e847d89d05374952262b' group='org.jetbrains.dokka' />
<trusted-key id='8756c4f765c9ac3cb6b85d62379ce192d401ab61' group='org.jetbrains.intellij.deps' />
@ -65,12 +80,19 @@
<trusted-key id='f3184bcd55f4d016e30d4c9bf42e87f9665015c9' group='org.jsoup' />
<trusted-key id='ff6e2c001948c5f2f38b0cc385911f425ec61b51' group='org.junit.jupiter' />
<trusted-key id='ff6e2c001948c5f2f38b0cc385911f425ec61b51' group='org.junit.platform' />
<trusted-key id='7a1d848e7c2af85eeba69c99e7bf252cf360097e' group='org.latencyutils' />
<trusted-key id='019082bc00e0324e2aef4cf00d3b328562a119a7' group='org.openjdk.jmh' />
<trusted-key id='f36ca0c4b500f0cdde0c5aa1913f763cd0f9cfd8' group='org.openrewrite' />
<trusted-key id='f36ca0c4b500f0cdde0c5aa1913f763cd0f9cfd8' group='org.openrewrite.gradle.tooling' />
<trusted-key id='f36ca0c4b500f0cdde0c5aa1913f763cd0f9cfd8' group='org.openrewrite.tools' />
<trusted-key id='ff6e2c001948c5f2f38b0cc385911f425ec61b51' group='org.opentest4j' />
<trusted-key id='a5bd02b93e7a40482eb1d66a5f69ad087600b22c' group='org.ow2.asm' />
<trusted-key id='475f3b8e59e6e63aa78067482c7b12f2a511e325' group='org.slf4j' />
<trusted-key id='2b1042677fd8190c7b9fc0dc2161d72e7dcd4258' group='org.sonarsource.scanner.api' />
<trusted-key id='7cd52b5a8295137c88fb5748dddafa7674e54418' group='org.testng' />
<trusted-key id='fa1703b1d287caea3a60f931e0130a3ed5a2079e' group='org.webjars' />
<trusted-key id='56b505dc8a29c69138a430b9429c8816dea04cdb' group='org.xerial.snappy' />
<trusted-key id='120d6f34e627ed3a772ebbfe55c7e5e701832382' group='org.yaml' />
</trusted-keys>
<dependencies>
<dependency group='com.github.spotbugs.snom' module='spotbugs-gradle-plugin' version='5.0.14'>
@ -109,6 +131,9 @@
<dependency group='org.gradle.kotlin' module='gradle-kotlin-dsl-plugins' version='4.1.2'>
<sha512>B23C4355CBAB2098506528D196F6C9A71D4689F4A3334494B97D9F6D868883D429D851FC319761C25ACC86F0C4E02F028B33C1868B6EF7BA1246E3D79ADF1582</sha512>
</dependency>
<dependency group='org.jboss' module='jandex' version='2.4.2.Final'>
<sha512>635642582701F6AE26DF91E39D5BFD9345C4C219DA73E71A27F4740A4C0C7970F52CEF667BB9CC4DD08C26D9B0447EE003C9E56D5EDE68870976356C2FCC4A5C</sha512>
</dependency>
<dependency group='org.jetbrains.kotlin' module='kotlin-gradle-plugin' version='1.8.10'>
<sha512>5BA8B33D023D112BCF170B49CF66610A1A3EB3DEBF0D028065E89AE40B23C55380D329B354E1698B44912FA78935294B9F7584AFA6FCE995F12CE1D1D0A329FC</sha512>
</dependency>
@ -118,6 +143,9 @@
<dependency group='org.nosphere.apache' module='creadur-rat-gradle' version='0.8.1'>
<sha512>397C3257C5448C26304B312212F6DA1649AD15E52CE0419C5BA647F8A68864707A0C8071FA9860C28AA9D626D66C8FAF2D5F576E693F9D01B0F71EEEB84B57FB</sha512>
</dependency>
<dependency group='org.openrewrite' module='plugin' version='6.6.3'>
<sha512>FAE9431F2ADE6A8460C7E86AC5FA4AB7A2E11DB919BB9C60F59BD684CF5AF42A9D0DBFD4835AC8450F0F5B36258B6DF1920E445F84CBD3CFE2944F4CE430DF58</sha512>
</dependency>
<dependency group='org.sonarsource.scanner.gradle' module='sonarqube-gradle-plugin' version='4.0.0.2929'>
<sha512>5CD9C5E9C91145E6F5FC1DA819F6241ADCE8685C6C71F480CB7F7F1D2ACFCDFD19C631E7DC2E9FDDEDBA840C6063A020A377644C80543A9E366DF65642F16F8C</sha512>
</dependency>

View File

@ -0,0 +1 @@
b46dc71e03feeb7f89d1f2491f7a8f87b9d8f501

View File

@ -0,0 +1,38 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQGNBGBP58sBDADYRZmxLOkqrz0QZ/yESRpv7IeHGLqDE1a8QfFtFb14MJCLSAAS
3nMD6Szi9mEjEqYdJURRcMjbUBhePgbhzGa3FYkjAB8lj6IKbu+ogCwVm1S8+caZ
C6HNP1CIefa1wQgi/6FNWEBKbKefUr/DoG1fBAWUvTPC2BjiYOHDaU1xFWwhF3Np
p0gEoK2KNgGgy/aSCi9Rb1M1ynPF7CcY8vKpAo6YfJpoNnput3t5FoF0uPnIac0F
gikw6Iz8knUoYeqW2MTKNBxgQrtS+Ji1J0EgzT2Nq1SBMPfmq4/h1+XOQweWY/NR
GNQTzcR3v+FkLkqCIaywcWUMXkhFXB8U3TdPa4bCEbFlP/AUkEw0X/obxm0isshU
w7MRMPoBXR3FkEApkxB+bFptY3ZbBYhu5PCf4FWBE8+FkYEJ31IS+nABC2u9Jcav
o5TqVd0y4e8VZ2qz18ez3j2G+nVthHz2OZ3AdEmq60K6iD57RY0H8zQK7xeEe3Ye
VoRmpZdS8Eyk2aEAEQEAAbkBjQRgT+w5AQwAz/O+ShczJAFoHvVHLkMmZ1zwRPqT
iSk3AYlA3DmMHhw/sZmb20F++yU7IfBx6Fe5WA0CmrwzZCssnZQGNa7yDGpDgK2C
6d5ifSxBWZ4T1zAGMNYFt4eowHPXFslJ1ahm/ELstabEEOwWJMsIKZUlRHhHtzPj
dCGDRqnClLTngY+XHtXgnNjbfPuosE9XV9LDJhZucOnzmxRwm1jVzAt4ZCRbk7n4
oX1I2JDdU2BHsa2gigdJyzj1Yn4RR2uapomzZaYQcDYmgQbfQAcxVunISBoXQ88V
HVXMRVPs96xWy1JuduryaqCYG36JCNCRgBv/DIF1V8Us+3YiwZtP3Z70tDUi3D3H
mCnMPTN6CNLxASDXvoqwaalEnVWzVpyk98HwpZNXurQh/WHV/GZTrOI4dMR7SS/M
hJNyw7RGEdiIw0c2EdjyBKqdZSI9LNJzbm9B8nz/tt6b265BSW5SACyxeVWGfrxo
cTXUXGV0ZXgBMdjmtEYgYmRB8UkLgw8sivdhABEBAAG5AY0EYE/sVgEMANM0si+m
zaU0yswcmegVzulRloW6lwGUiYPyhhKmbWvsJI0EGs06FogciFW+4piZd7F2ryui
nT4tLgZENsjwbF5h2RkUM+d9mr4r7r5ZTO1pJyv4OgyQEAKvSrYtfQjD2ltgfVLC
FUD/jHXOVbIjT3m7+KXKug3IiGlKDYpNGHme5co2zCXtMpHZVB0DSmaQn/ka1u7W
daeW7ycscWtC4pXuHODZ3I26/Ct7VUUBJvHQb3cY8/17zAsf7sSRsdrMNJt+Z8dS
eBd7WpTABJsmyX53ezgCj/nHbqkqDcsCmzOL9LFGQ7L+bAVBfoTGyStgfXBYjo70
vZKKq8aQuIc+oiWSQ3gNuavHw9kNIhG8rPUTlIVvvDHFc2f4Ly67MOzlM6B5A7Gc
WKo/+/gqqqTfgJd0Y/wMD2/BonmQSoD0mqhM3RWexdpYzK69ygt1EjQSc3dCWd2p
ouxeof7E4ag6swtkwEg5JHR0pxA21DdeZtoz+cfRFYf3ouNpcMMHrdihSwARAQAB
uQGNBGBP7VUBDADgQy3SvkDWk42nnSv6Su+Lmzaqc/1kzC7UhByy6J7/XfG7zKOZ
5+VPVyRAtmMrQNUYmerHA61czGurOyVYO47TUtX4KXBjb7dWYMGmbwu+2D6a2/a0
ZKGVrUnZr1vukCWN6rnNg9wmByNNSPrWyV7dx5YTrG7D9PR/vyw8lsW/zYvSzh/3
2ka18SZPDP+oXfQofQPw0HcCKgfjZmSxLl67anNEVl65fTgAHL31YzPsrzWTEyHU
N2vtN7ZcxiY4tXhOm4YyBBhEDo/yjufCVc4fZpVouUagHWC5p7GH1nySdRdr5QUW
WXzj3naVFWDdHBsEp1LWEwsdaNJk1bD2gTTm7HHEbLI7kxa2ebhdE1y5LWEHKEJF
rUtJE9wu1Lsaksq2Dci9v+jg9CcXp0J6yE74DmFKAk8wBMCGVoRidahbn+tsLWhy
31XDaHD+6xI69Y7NNO+CvcsRLn8urZrsoc/+36DeGGEmbxXJ70PtUqXUfukSSKpy
72A+jTAh+Z5bBSMAEQEAAQ==
=AxP0
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1,16 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBFS2J+0BCADZI8RYk32YeO9gnEkY9RN+4dKb+H1AR4v+IGxmy0UYy+O8bo4m
YzkQHTlPpEPGe10/quKk1embDifEfNa9mwcSJl+XUPFlTrSA97SR31mdyK/Ua146
GKMW0F6v8aCgLUlm9BCJo/OmOat2jsc94SuKnPiRRywhmapte/8o9t7/0GghqLyj
X+Ifz4WSKyKZ8oe9mRFg1ZIA+z52a8QnfyI8WS8bpGHM/dXkBXZpzIDlrfKvoZYb
I2DcbOotJK/ZzStAZ81e4E/q2BEw96NUKJC5X+G8qahEFNJDcJz33UAxLiTFqWmw
iKLqy8oL8p9qPYlx0IAXoW/GxV7E0rBoA95pABEBAAG5AQ0EVLYn7QEIAMde+nVU
cozJy9dzLCUpn91SCoWld/wTaSckxTnVMcr4uNLlJI/2PFjMb9ya91grr1yuwqSG
3jE8P0Qdk9Bi6t6NkMIGUSJuzyIipsDDWaiCfjWxs7seFd9c+rgcH6r9CaUbNRfU
rPqEZSeL+RDwIIz1gQkXmosF94DjZHP9abZYObH1/Or64CSRD8Ocf6kTRndwJOZk
RdDtUX5NPFSiU17E/DoEkyryuXMR+Ci0b/hjQ4JnriGeyy6c0StWQUW18SEYPV0j
3VyRRUcOLhJajEu8KU4Xaaxgb/2X7o/BosjjQ8BPPUdTz2wRluU/1tKUQ8D+O8QH
7dCR3lJt76kKWbsAEQEAAQ==
=ZM2y
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
1f47744c9b6e14f2049c2857f1f111af65925306

View File

@ -0,0 +1 @@
5719e50eac5a4b1dd390b72c2a742740e08e7f8d

View File

@ -0,0 +1 @@
56b505dc8a29c69138a430b9429c8816dea04cdb

View File

@ -0,0 +1,15 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBGPF4agBEADsWnQn3m/dMw1Q6FLALQCEucRkRLw4wcmtzXuuYb2M17aHvEb5
+OnXDdgQ2QcnnjK4S3zQp/Jt4ZQnnLORqx919+c+1gT24U06VxeGPW/TLRn/hnKA
ZM7bwGCz7em/GQ7JaIXPn3aqGrCiy8j8N5jAQ4ePP5ESQLeWisQFlbKMFVU09B7t
0IPG/LQ8xJs/SveQw8sGrz9zqyYE58EauyIKfiI91Ruk2jMcb/m+SRL9Bhen3Q12
g6kFrHurLtEWzy1rwELt9g9OILv0FokPa2m0goQRHx4nFY0kIpJ/r9kDUg/tlg4H
OxP+5XTJxEXGW2gb9zpmDpdR8aUgi67/Kdm8+norzpTTMAuKCgclCv3bJz2D8Jnl
IgEXmSoznn1EnFkm0Qsr8JwkaPC6LkGcI7YqvEdCXtRXduot+9GgWytp/IxrlJ4X
vFEhOmChdVdn5lT1T0ka6NxEJcmf5mfgyz9jRUVHINNJxQKP1Gh7LyMFeWw6V/X7
RAeU/th1pL2rAeBqn3gnK+CIR82/AVDJJa86BAHiQBYilgs+bGYriXYd0qmIFvYO
sSfC87Dbl3kzwcAGWB4d6tezLxrzscfbzWFIa9woy31/OcqK+uglSKbTFsIklhM8
Rr2B0tQS1iNzq5gyWGKnh8FsqcAiGvDpwhF7irGhU7fNRVVSuamVDnV0BQARAQAB
=1wAs
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
48b086a7d843cfa258e83286928fbf39003c0425

View File

@ -0,0 +1 @@
e113159331a1f87bfc2a93d0960d2e8635a91268

View File

@ -0,0 +1 @@
a5bd02b93e7a40482eb1d66a5f69ad087600b22c

View File

@ -0,0 +1 @@
7119b89feb81209430e65c62c2ad9c8a7d4e988a

View File

@ -0,0 +1,16 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBE7JURcBCADO+9Dc4/JnB+wX+fq+Fr2zUGSPOT6/qjE5kXL4FEbJKsqDSAKG
VnbtRrsIUdmNIFQmz71bBDFhRBbrSrkz927k8eUPhYtxE2NmmWSuKgrjF4qviPQv
m/7SqGx378m/qw4EvpgGUB8EYif98LYdWp5vsU/zx0Ps9auqvetAzJaL9489oE0F
q8FVhve6BMfUUV7zOTCmJnf438YO68upjU0PVBdfFE6Qx4cgCeWbQGy2cooW5azN
iIenhuYU1qikmxMHq2xZzN4uSTWLGDpimPyz+Y1aTSYJ/bgn9gPStbI9sojWo9SS
5gvNK3XqJzMwxwFow86UcIE0vPD2T6ZlBAXRABEBAAG5AQ0ETslRFwEIANrjVe+1
SPgEY9Xfe2+XGN/3q9DHHPP0PXLTGPuWKUmAzkBddNEAXTkPKtyCbH4WXhf4jBZR
yFIpLkoGrW/yIeJZNfoq5xET7ldjDaAMNxb59/78JfyctGbEAgUlzueFONk3Dl0s
DS5GDiWqJg4orqOtUcY+46oo6Z8ncKBbxIvOL+qv1KLWtzIoxjG81PUMk1/CfTij
HgklKtLlbpOHs3m47/28AP2sf6kESKxBwzjgdSyeSci2nCuPoeSfLTJBJlsREL+z
DaJES4G2nj6r/rXX9YHnuH9n0hNxFyhcY0ztsIyz1wqx0kiOYHnLIpUJ+2TcR/YN
mFCYqZ/co98sDMUAEQEAAQ==
=Pb2+
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
cde577234159e222bc56e50f9c61220417aaa02e

View File

@ -0,0 +1,26 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBGQYtMQBEACmLu7LRrKxzEnLmRI/fWXuO3lcr2Hazd7DVmMSqH5sf+D6taoL
uNRchspbHp804GOltu7lR6rNI5htQOpwVuiF6hu8HORujpv++N/yGdW3LGoT3R9a
wNkJIudgOCxSZnNON+gKe4pqdk1R3WKWQzXe5o7PBn8zJen5uYP9MBN66lQxXw7T
XsDDXjGRHJth7lOzJi/JStcO3Nc/n8PYz6b+t7LW7vZYshogRq6yc4d0Uktr3ZJw
IgiN6vT4I2nHU48O+nqvKevfspNZdyWyrUCkAC9heANiXNEnr34j3EjTpJy4Cfmg
By1QxFEaJN7HPf6y4OtTd3AThepK/8o69nw2LIjK6mvWa2ERXSNAVWbSKPlKf74e
/x6bBDDqevDx9NXApTLrHRzBKDgQ2I0r68sX8RZTgbzx12I5CYTpDo1JRprVtn+T
dfO50o1pxwvlDBuWCPqHERIzF9QhNXUDy7uh6J2s9qho+p6LKn01cOXoOrlMg6ZK
syd5Ffo/kqiDv77IMAdaXmYmZelX2y3I0tfM3ccH90u5cDKEhRdiFiW48JPnhcz9
QKUvGtT8hywsjkU7MpJf56uVQT1ApKmdL9rOgnjGnGeB9HNxEhXl1z9Sqjc0QAx9
mq1TZ9K454lk+AqwAkUppoMez3tmJWULqDFqZkLuh/uAjycHhLSHmOWq1QARAQAB
uQINBGQYtMQBEADaTQ8FyQYGKEFydGosLSOPet+Z4VaWWrjF4TOElczfhJnDhGIl
iDU8c2hHFbovdWfW5fb2G+mgckyXnUFtO0FhIDpho2Mmz1sR4ZY/1dXJdaeSy2kb
OxVTcVVJ3iIefvV7P7k6FGz36ROTthLN+Y0O3ZS9QlXDjtpOcANszgS3zaC2y6T6
YDjubU8lMfHAad/VNgCtuG0IcErI23s2hNH5IpzndyuZoYff31UTzMW6KufbQC4c
Ak7u3SQYVCq0HP7o4MiC+Tt43tLLE4WZUPpHU2REu96FZTot9/6WROTm7SzSNzS0
q764jKe3Q1Y3AY01t6kpQHv0mE1bQ99e6yD/Gm1J3Fet+0z6Q6yB1Evt0Omac6yy
EJ1eePB4whGmeyoC5oz94jbTkGkhXS8Cxwl+M7HetH82ShC1XPl6dz67WnUndddX
LQnOr1PfXI4k81qUyPuojvMLwKhX9lWhAJImQp2e3PqAa3pZOcjdw7pE77ZvKF2a
gwUJ0nEenzfM9oyj2/V5NGCI845Lk1K/319XmxaYghEJIaNBAVDrrkoVdY6tD4le
5RKdjfTvnndYsZYh/rJZn+fp5GZAk1hHQsj/yiS4kQ3h/Lt6Gztv5Nsh7U7M1mat
SLZtB/pfyHZxHmS4khcR0HGyHUSZyPBbz1Xno0hqU4xWOlndax+peHjnHQARAQAB
=IBhn
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
a5bd02b93e7a40482eb1d66a5f69ad087600b22c

View File

@ -0,0 +1 @@
e113159331a1f87bfc2a93d0960d2e8635a91268

View File

@ -0,0 +1,26 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFqz2mMBEADf9rwaUU4Up4hEHRt7JnhIClBNYqQr8Oc3QLvtEmsMv6UWHQ/h
l70MhvCrAZnxnDmcSEE5/A5VeZSDBm4qM+jH8x+B9zIVMoWS2c3IJeE0Q0bt6MO+
j6TQrrXmetyCvzYMz/Dbr6f3alEvh89ImkSZ4XdEByFcoXTdpQ7WUzYNw643F3W+
pXg2eMm0DVN6Sqagbeqt1qZQ1S/3RwtSIgfGt0T88eBYMe8fhrLhLvsakERrPBKj
01uzeBJ5BuUNZ8OrI23RaF7upDVkoxlZW6dz9u2W0YiKozo0IHP5JdllSAtg4Bbn
sSfNdia0TbTT5Pwoz6ncY5ivUnCeHP2nZ02IjTAwNs2mni2KLRKop/SRqKG0jqRT
wFDS4XeocvBqpCAHR/Gf1LmR2j+jGGkohnFAqS9ds7yZISnp+5VnEvjs+vGwMh2U
ybwGpFJTFE70ntg7t5S48P+IjuUDGWoEE1vZsMmm4ytAHPxRBeERvMhPL7PLLYPY
pejtRIsc6qSCBVi9DHneXhP1bh9Osjg9YOckShNQTsZGo2IHxjC1dqXXWn0RNYLa
oxqz6/RY1uA809N7/kwG1xBgaRMJl/HNfBVAFf3Tx0ILI7cVGvKrHpDiUfSxLpY4
M3EWBRlJ925bkFhEIQ2XHhVh6fhy7W8oB47dnYpTlVyEi6iPh+clUKuZ0wARAQAB
uQINBFqz2mMBEACt5yWpYhiY2Tk4NXOVBGBe/r8vwwfKiilH7RcUVi5t7JP9n4IY
8vzp6sENykHtsTITRu32QOj7KAu1xo6hSdJ9aUUuL0/xiWF6eiISqa8isj54XuKA
4xgDTJb6gS7EFAZgU1PWVAihX75cEWMmNfPLulfqOGaxKm9kgdeo1BGDxp5aFm31
EptDrCl2h3VgWDaBOm+Zo2xQyjMEpsBmrZTLtv+VEjDGb6J93sgsTFMd6eAhd+Lu
yq62Ap/SmavBbYyhUIv+ay/2Kv+8h8lLc8KJSt2Ox/hDD8NFShEw6Q5VDU6+fsjy
CauFeCCuDco9hSSFx9d5dNod51dXKlUz9Umwd5NhdLa/OYW5rA3ohsoP/4HbSPzw
2DBacf+No4jHxnk58SU4XGyvDtWSuiTVyDrZGiFEYpPjEXUuwjidiSCa3jb3gfl0
0lJjg5wKf47TWgVh94AgHjkZGutv6votGc1SoGS0QNJjRFeTjpr1nEwOihz0AH3a
FTkiNBd78rsMctURswvfIjHwGijJMrSKzgKysgUTuuyKhvhEH6C739YweArhJkNo
HP4Z91FEDrn5PCtUHY7deGHiARLPcgnN74wq45iGNYmK7Qt7sbWcJQzJqtMzHI9c
MyM+h9nm7lOflBVvJo4kTYkIgqwg6rV/BLCv6/ONqmmMmEEh7B5c4GA2IQARAQAB
=/Car
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
1f47744c9b6e14f2049c2857f1f111af65925306

View File

@ -0,0 +1 @@
ed09733fa05dedf15100abeb32bbf14af07ca77b

View File

@ -0,0 +1,26 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFPaQqUBEACzwC+QX+uZlPAmU3ds3+HMgw12yoEb4Wahc3hqL1nSekUZ4oN1
EdKtzIrTORcB5eH987FfbgM4wPeott91ZTNuxr0X6ulHH/YzkLnytMjlipEuoxZ1
FwXjTBN187Xc6Tbewco+Tm9BpPNVO7eNlmJih4TRXPmb7Nd3WAb9UYOO/L+iHluo
6SmZ9fIw3AReNdfVjIOV2w7fTQJdBt+UpN39hrHU1o2Ok/H5EsS7gf170HQWgpHd
0GgXVF49BKTVVu/D+X3+C54DHfMJUwsxJ+KNYuYIsWV8nUf+Prayji3IJLeFBegL
VO0ZzoQs+u/PyOQIOTz2odvUIwde0rZCveILi1W4wj9ijhL0eT0n+tepE85vlYr+
ZHXrlEelJHq4LhC4a7JSdhJ0UreJM3oTIS4svmR6TuwUjAiO1ewYwfjWB5EWoz/7
qQ2fj5gjgP2A69DXtJ4dhj0lrUWpCDy8lgdKAgIpxepE03o7SaZhLRslwCQWBRW9
SdSEByx2KwZMcu7cmXSgavc+AiSDD5KIZQJdHwEP7r4OewyRpCa/wplcPAimVUs4
KTt7bXtBnw4jiGiLmTiHwZqMmCmSEUOzivG+7wuXsBA0ucivmert1IWamSdT3NRt
C6IdH7KR8tZXzmkIl6ARH0WGz109ZrqhU1vCG1tLWhmaqW6VuOr4J7lA0wARAQAB
uQINBFPaQqUBEAC0uU0KPaS4FjwYB0fvD2bJ7zLg4PGhlAYkGGOIWMSys4pNd0Ql
TIdKqlZ6hmCEiPQOwLAGN+B4Fpp9dU7MhPOTfEWY/ccYcOiebktJvtY5C0KbC3JX
bVvYKZXSszVcVIvlEMTXt2WtRTov2cff8uWE7vadXSNQozBH3pGBnBlkzTiYJf8y
h9BNqgQ4evJG+nRfTPOPHtPKRCtDaC8CwF5rnyD9CBDuFLxd20i9i7T3tsWkfOV1
5FDutdtZU97S43cI5d0apQX5wk4XzM3cEmlYSvW3EffK5K0gi+Vyka8JxpR9bwA0
RzuCwwbP4HloAhxVB/R3Zcsy4wweK2r6tFOdA12FigOGbO5+s3Us6zp1q0GL8N83
D0D7Y8HMMJmLoPhK2Ddg5T6zrti+2z0vO8d6elmJluASzbMYYk4NMxuJTp+gw0i8
iTp9k28/FNZbHsVReoHOeigybawoAOZX3x+b52ehcoIWdX7IiVyTFYsPb5hPPmrK
185KDwAnYxwSaoamxhj7MybCNteUFCjVQtbD2UHl7q5nzEwUbJIO2ibwOCTBw7FO
zmdCVQ4ex85y/agKnzaqxBg3fnpuRKQmflG24oPhwu64gUW2GZskfCQLmLPX0Lqq
06FIcS9qgl2o7LaLDLTdS853E4696B9tMXUOgEtvIftZKdVKE/9RqQ6PdwARAQAB
=Dpj/
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1,16 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBFKQ78QBCAC7JYRWDFIDUVKg3upqCY4TtA9wO88x9Madd+2SsZX6dkmMXgDD
MCAOP5zqFgX0ZoPh/sOnkEx9I8owfwfITN2H85tOdJ9rVvuWzgZXQpDkWExDG25L
VNVzcTlOC3ZrJevjo62WNL4QPKEnrFPvXa9G+fQabixAPFqBwTjVP5WNABr49tol
nwNIKNtiqXHXES9J3G02SIjIS8OgbzW0WtSwP8qi8EUzggnCTRCh+lt/Zz1XxEx/
Zlk07uurOebvJ2wKJU2jhzYKMI48h4AI7qowjU7+IrGmEmSQ/UIyAnPFCcmf4Xyi
Sa795ddZd1KKy5Zxl7SZk+2s2RXzYP3Yyty5ABEBAAG5AQ0EUpDvxAEIAKYmziBF
eMz5y9+sl5nOhCZ52H6tbCbmPT5pDS8ct0hFuAocFaOlq0fUyPPtH3S3vgCaNsg+
yrZgzUSdvwWKWBiJw/vg+Yw8cluNnNScRzaZOlW29rBnKZAvZVuMoQ3WoR/8kF26
BgSaJ1hRduAQLQMmjONWuQSGsU/AyA0K1TQsHNpAuVJIS2PdOuAnf67YDx9WOn8u
+Bk302Z+7ppy88s95/IyG8Mpv3cqNaaGyfHRwMPIEZxSOKwnh5yhvgp2Il0BTfwW
WZeK8Ls/uBask2FllcQLgQMxkWFRODUaTK9cjSkmXuu+O/9kLnexUvuCdFUdxHqw
lz3uqx1u7XBxnBkAEQEAAQ==
=sePN
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
7a1d848e7c2af85eeba69c99e7bf252cf360097e

View File

@ -0,0 +1,7 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mI0EVdDLQQEEAJMtYCaTA56YsP5RzQzPvqVTaR2nZ27qRk36blHB9WmXK+NHpGeH
PHgq59mLPVueo2/M5k/fFrCe36jHePP31gYpFtueeYDfsofHwod0WhsHyC7JfG8d
jEnSczTCmOHRZ3ed9ef6SeWUozYCQAX/tAbpoCthe0lTDYhFhkzVCe/FABEBAAE=
=45ZY
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
120d6f34e627ed3a772ebbfe55c7e5e701832382

View File

@ -0,0 +1,26 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFyrDesBEADSY9ho1u1DQ8MY+jc4xApFAagCd8VB+YT96A8FzvPLuj7f8M4T
JNjd/Te7kR47SW5KoROiucoVw/YrUnyaHw5Ph+vF1msTlxD3OKU2PiVHI5JJgg/1
WUioL4wASue+r2QCOc73a2s3eVfSFjozNE7I/gXlbceuN5+7O8a2eEBDCErH6TPn
yD4ShnnRPtMfBTYKMCV+sclIsjO4buxyCfqySyxHS4vGXxgGxZVvc2HrSbL+JFo0
PMcjPSaK6u+w2KBo06HS7TngrRkxHmqzuoo4xc8HGaSA9XKyQPOrcerIsdns9EpD
ahk556qOtRQay77tDwF5bJZvA37DJI3QfVVXTZBFpPhFHmP5Ji/6OTsodVhpTQr1
mycP+zAyMOzD+gvnJO302PFWCZblMXbmVMToefNIXAAobTOaG3QwDsvftwQX9c0V
ZTDSoZJXTsYdX/2AOWOU1RMzE+qbzgm/GLZZ9ytLHGdodL4tmo3mitPsm4FLwyUH
TjcP/SsZZQk2mZyiR7/vl+BvSTqnHTXj+10p1+MIOPiUAwaa9JVglV4odkJHZwwI
7yEKNqyDeMRBbxtZn79l+qmzsMi+51MRdgPiBRktPdwC6w+bkxfSKCSWdD59fbNg
91jFktNtUMK3L2NLX6YRuQ6+VRKGqEOI4l8hEDKM7/eS8Y5Dxe5RmesoeQARAQAB
uQINBFyrDesBEACqVQoHqtE2l/1crv6Ym49ZHT+wtmtfS4D/ZkthHz3Bc0Zne4+B
DbXtdG1WhUvO+S7CRfeczXxDMmMsUeN0/hzcCG03QguFHQyQL9IIccAZRij6TR2I
aF/N43fZgfL1ai/TaMgXDv7LTbe44MK3w4jqfrd31Ee+laN+gluG+o+LJBkYfpzC
MlkXp1Xa5kuFFoaGn+Dyy0MTs37jnbgblyraGogkciERzlOA+3hMnolxTfx5v/Th
Mq1tngshYw/PkLACejKCpJvi03tJF3Q9d5q81AqSyqthSnfIITfOJ40U3J9pDM8Z
WJXkkXunlQIUcdNvQAzjegMg1KB8TdVuNcFW7ZrtPAOsSxEBk+Ty/xhXBLxoeHXj
WwVlbeSAumCZgVqkkvuxc+0gIocqUKjC/VqTyoENX1z8/dbkiGRmvebUJaYxoiPE
x8h9O30zqKh42ovM5xiEHajZ0kJBLJgg225VCdJ+4ce42LkZ0x67EcDZYdQ97iRo
rOPqBK11ReeexFsrkfcJoywBnlxIuPKqJ1T70JoqDX9TJHAM2n07kbxjU8E/pqGE
jezk+oQpJqGTXibFRizvZbKDeBPmJXVCUHGphs0ZXyzgk+WGEqBuqR7K3dZKykCm
AZui12ZyHxSA/PKzaUKMAQmXrg4f3LxmI8GDl4EmuSykK6wAO0I+/X08pwARAQAB
=BwIl
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
7119b89feb81209430e65c62c2ad9c8a7d4e988a

View File

@ -0,0 +1 @@
5719e50eac5a4b1dd390b72c2a742740e08e7f8d

View File

@ -0,0 +1,33 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQMuBGJIi4URCADFspeHyziASBuPXpLpikWjmC3D6VtTaDT17ogOyGLf6/sjsQUz
0KS3PzWBuPoqRGRpTtZxJ5yr10apr8mJF9Po5LFkrtcexaiYmUWAZAik894OhKt1
O9he2Sh1OTUiTmFU4ImQY+AeRqASZMYabhbbJOfQLJV2Er+foKzRC0T2MSQVjDho
NywU1IsQG58lXEQNOA50uCuhnaCUy7Mh/GKCejyBaqXMtd517evHhqsJd9tWMNW/
W2xKvGiH2mWSRjgllZ0h3zHuUEo8xqetOuHrDGGRpkzRES0kIT7En39hpVpP662Y
97Wolv4C0/UE4rlfCmiplf6mG9QPET8wZeRvAQDh+Z27sD3ODWU2P5s/EXzsmBoi
kK2KzGE+n32kRY4fHQf7BE9PfZ3f58KICY7p5apxP/6+bl8uq9vcszGPHl1aT2cH
oQpPm5i2UHRoWXh7U9TpKWxxqx+yvJlPhV1c2DTvdbx530xEMF6up1f04+axhlqE
DzjzOenwpnS3DR5iUqflEM33njj4tK+Tw51kXjyBxafPmaKEwuqzYzCFoojidmSx
Vk4la9hCvIJzGQ+3iTX6OR4d1lGvRGmVm2g2AVrpZ1yPncgjCu5qFH9UiBblE8LV
SVGBufS86pRwTrwW+fXaKw5iIyiPMSSE11H8uw4q75uFVnmEd4JUtQxGjnv7vbjq
7hAeE3T4HlLPFBr3y8c3829HY0ozNVKKtXs0/lBzwwgAm/59t1B/dMl61BaufnY1
5tYFAcStTrl0c3ZAYHO6DWYTJ8ZZQqiBfeyVI3yqWKQAYg0DxC9AzTtNSOs7SGJK
dgdencJoa0ElraZuVXfb2Pr6cBv5wKRfU7ZBvHfCE56vJ/0zAvGbIRy4DYup8+Pj
vcLSSWvQMT0iHk9TTw6sJNV/S4aH37Ux2N3SsARvqR1nZ7rQaGN5eTg7qHmwgIgd
AoHa2Jd3ixOKuLzwIF4hoh+XKI7bYzVHwYq6yVZWevloxlky0FfAXCH2/lrTGyvj
i83tPUIushngZ07senzgK0IWQIuLVjl03tJ/rc12AtiZkx1/ykssQ2uJolIRLfou
u7kCDQRiSIuFEAgA+Roa4drFpqXxAR4ZjJ2WA0v9WUGWmbZr03BpqjoWzgHvM453
IbSQ3e+l+DYzfxw0EpVKs+7GiRLP4/a1f3v0ubBPf/QHfiY/lzfqUDwCUNfB8Zkw
ygvsydthI+DD6hgWOnd6la3O5vtFHvpuH8cv6uYJVWIn5wVbvAbyhJIn1Ug3++Qq
/g4Dm7QCKsu/phulcgJtaZuDTPRGKLNhmwVbO7E9chjW1peaEbYhwI0H1jHU8onX
s+00uiM0baOnpI20+5bvI8Zm8wYu3FGmzhykOLKOwd8y8NlR2VSaTYZAGO2+h2vm
/PWuMnnl9v8mpYi9XbHdrf9KndAcfx+gYtjdxwAFEwgAqg9KGwxXoPtahCzrBdq4
M4FK7zJyq5GVtSQXFEzPjnlF4xvcF9ntG+67S7vuPAvTsHyhvfGaqBsssi/eDSVC
xD9FIYXGZDrrVCCoMkM1R7qmE3EZKr2fjBKUmmQb8qu6sknjDqUkNwyolhMip129
AUvrOW7SV0HK33SSLlbzdv9z+COYM5lyLvgqmWjInKziuXpG5ATszGqlz1BMH8xh
tFDoOApVnVPXPO+pLGbxruy2t5DhVIEnsuV/A7rs6ko8XCXk1+njvIyCQndU4m+j
NRqPU86Qch3+qZyUBuhwmL/u9VsKcrOl0w7KXwxWTbkqQSZynt+NVtpuPKNxoaKz
OA==
=DT4Z
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
b46dc71e03feeb7f89d1f2491f7a8f87b9d8f501

View File

@ -0,0 +1 @@
b46dc71e03feeb7f89d1f2491f7a8f87b9d8f501

View File

@ -0,0 +1 @@
635ee627345f3c1dd422b2e207d3516820bcf6b1

View File

@ -0,0 +1,16 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBF3HgdMBCAC3ET5ipFXdZ9GGMbtsCQ3HGT40saajsNDOdov2nMJxzKkVe3wk
sN3bpgbsqBU9ykVkIhX8zV5+v8DOBzkV0pJ2eLjFa9jBPvNjV+KoK2BAI5pzNzYg
sHPwo1aRXdI0MvCy+7iaIiiGF4/O16AhU4LmALHnaRQZCyuN6VOQ8rlqNvcczwUf
J2DQeLHqR/tsch7S01hGpPAptBeu19PyAlQsntYN0yLCLKoe9dFXWCDkvd1So5LF
6So+ryPqupumBbh4WxCmTp9qwDJYJItjAE0zyPe890FurOtxrFTwtRtX6d6qGKkY
/B4T3r0tTE1EiOUpmSnxmGNItMh7/l5UtnHjABEBAAG5AQ0EXceB0wEIAK7dVAoq
ZqBw9twxk6psNcTmIrfQbvjasKl/+PfLCfBNklD/nwe0CLz799fFSFMezCg43ZPC
KIescCQ5t74r0D6O/QTGMpUyZD+w4JhZkMQYy2HjImfMNtPVOWb+XaLku/RloPt9
MSG2mtA25TTp295N4mzMPKq0r1PzSa8jj4Yfn3AzzSXXLq6PwoDiljQ91IWBvJL2
IAUAMaxSxzq3UqJnlbX2h0yMM+VC0nbSmbkK8mUNltg1EnngJKV1mKRG+Y1GDmZZ
1Es19tEwUMsV9x1gt05YlecC31woUkL0//8i1kWuWG7dqRMf/8cXaTFA1brVJ33b
/G0VQP/a03UaVd8AEQEAAQ==
=AghA
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
635ee627345f3c1dd422b2e207d3516820bcf6b1

View File

@ -0,0 +1 @@
f36ca0c4b500f0cdde0c5aa1913f763cd0f9cfd8

View File

@ -0,0 +1 @@
e77417ac194160a3fabd04969a259c7ee636c5ed

View File

@ -0,0 +1 @@
f36ca0c4b500f0cdde0c5aa1913f763cd0f9cfd8

View File

@ -0,0 +1,26 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBGA+eiIBEADDcMhLJttJzEdu0drh/9d3wtVvdCm6cfDk9dVFxk4dt5MLe0f+
Bv8+WKMmfbsmZzj4/f9nwYMXk3yx41iiN41uuc+YTT8lHwsOdmlPClBAQmtg+VT+
xTIXqGKQmsElNjKSnGMzC4wI126cZrlv9uuy1NkDfjv1UM5hCVW/e+mysfgDbF9G
cEJajBJIQc4Ps99YruNzbZr+kRis76A9CGtBcxVDniNcNNO7ch7rQ13Df87gQl0x
WJrech4mJRhfprqkeM9RD6khTpBAXSXuPOrM6x0hIWEILq0JllYQ00G1AznXgogP
fbsqbnN1wiztwXRVOupSOsH01CN8ANS5e+ZIWrc49QxpRHLue+r9ijDVAWQlF3N7
2AhUcK1//BApF095z2g1d9W/+BVbwn0MZnLjjNHZqU0myJxSSBfSS3HsKd+xWurk
Lp5yBEUaxgKBg90f8ikOl2DQxNt1EPucI51DwsfPbMXkAEEuBTOaZssIAI8DMxNX
32VmM5O9ZPR8HuMDoTgwYBCuemp0Zt5JnWyhWWBvpWzz+4qh3ssAysjO7Zmpkh6G
2vmG4WNzY0ZsttpvKLC/Ry1c8oKpw5vCM7+EYpH/lj7i9200hLQ+82D2ndxNPbBJ
RNUBzBmiyAPcBQ8IZZjOpAfBC4UqaCHDfgz9hPlhEHZAEFHLBHEGd9eXwQARAQAB
uQINBGA+eiIBEACXWHVGrQDyqTqboO3vXxCyM7NJgCEeN5Cp7xK+SGBPz/z2qfol
IR/lbiFqL/aaGVaSsCKh2yz8kGuPNVsGLyfvO0pWRb8reEG9eXTBVJxZmOQ4Ulhm
oBKLvEniOzPCqEPWGxSv2FBhXKeJyViLMD+go/6+jXfJmqBPFFALAN3CWiIZDrCj
FqiduWXMapSWptVDtWsq2Q+LD97U0+ESWzvt7BVs/NWzTbUWvXHYvipZ2ZFZstr+
ym1G4IsjYB2iy46gjePYh2aG6YSsG9tGe0FMVf1/dJaGz3U0ZMD6qicm5FYDNaXq
217pXOd+gvvpi3SxdaOiSMfYPuhoAv5y66+x+zqWNsNVPeRZydtWhbvhpNERSvCx
r9Agh+4WC0XPQEGrC+Hyau8rYcwMndAwR/Pw4wNKJuB7IqWnk8y/1m3Br2vbc+hi
uhFVOx+ZkBJrlUcFLVT2D/3fonDrxPWmOJvzgqlSeZaFMFNe5/UoXBAbZb/1E1pj
6uWrun11NOrZdsD4Eic6PzERdWYoWgd+7fFqeR3CQDMyOY1XvetOgPTCzwAYjLzR
UXTENayf/mhXtIbiqYLrx8ljz3HN5XUcFo9Q5Zep1e3IJNrC34dea6azh/N8cgPa
4vEKkHI3g+udt8n08WXGMMgrdvi3W/5Sx2UuKjJn/Iu0s13e+C9/odyLhwARAQAB
=X8g8
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
56b505dc8a29c69138a430b9429c8816dea04cdb

View File

@ -0,0 +1,26 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBGB980QBEADLBOfY981RbUf7zI9AoXcxGignXkYbeSvxIMML9vAbnhmuHwa6
h+81ZTY2XK7Rz211y129YidPykkiLX9mY+OWvJsj7dTyVTcIm6MU5ETDvovfmKWg
5sJRrANAnkZ73UVJIKTQC9HonBIpiPLmDEBfReHkNsXtYqS4fyZO5tkjy9ejaw2p
5qpOS9WixIvZT43OfzH+8O4ecmDrOZ20azogcWqLCQ/ZDbfnyHFH+BvA8bn4bS6y
304655N6cxDbShHrLWP6erbGozmLu/hVabCMSJgGRRb8NcUzJQ5rwh27SvKyMGKE
8u1ek57d2wv2pI+sACBMzYlrP1S9MTcpUsQ4YvDQi9Ic1QDw7f2KkEsEnxs7h17h
AhbBwEvNWqpFkKjI4ApYsM+/fPo0/lsT0lskjKrCnoEL9+sLKDcp85cR1dPC5ELf
b2bhgjqccIk2gASrjmTiryF7gUiMTgZVU5PF9f0+p1pGqC4GIjJOf/JGhhGEyzVt
BNvJWUgImqWbSFOKWfvnmdjZyULAVouxrrxF1vPN2U7KFurmSQV6tq/1Uf/qccR9
/uhEI30ypv4OrVi+8WoVsEamag/AlnRLFCEjdfB0oUy7V/lPqMxRoxmhiTX+cCjM
QkFfcspJt830vwct0pi4rtYt9pk1Roh9tOKh2UKRDGL5DE3rZbJYs+6TAQARAQAB
uQINBGB980QBEADfm6alrriLjrDLwBlQDIayE/SCyieZlfCsdcM2tcnFF8dznHMp
Dimke7NmZ7YYpuSi4im6920D3omARVBHE+JKAcIchCRPRTH0ZvbVx7bzdiPztc/6
su9YJ6NbJS81Mk5c2pAdw6e0qd6Zw98aVyjfcd8Dy42uuBfQrHSuYYpXy8kn+WZ7
zou7d0CVskvel8GhqPshY4Vwm8aBDXrydEIoEYhlhnzQTUmVylaHLQAnKSJmkWCK
o7UUkH1B2vfTZXAIVOt1q+5bkR82AT95Jj5JzKfoneoeXeIwIIbj+j7y1FM44e3V
DhjY7TsN4tyOqzMRZ5/6GcVpJ9Zns35o+pGrVa02CUQFEdZFrH1fF84MglydRgHJ
QsFuqOUt5cQgRpXMAhu/aex+Y1YBjyWPqRFtIqJMqejLRZ2SGAxQWOXOrW8nJQ0+
2leLsFhgbOvtYRI9NBm2kPZomHnrHmmG5EaBwjOu0xXPMEooIICUfCPlqmonXJNI
Pm2pZXp7geJ9zV7b83iWkJK4YqIs4UM78T1kb2EUHguAR+eS7kc8Z0wKxn0n/1e7
lT5/hlp7ZR7wn/qjr3SAR6RjfIevakD1tK1zj4wJgPWmTnraeyyzrOCq7z4tNGgG
ZSvSrKWckb4h35iSEs6mcAEVRrzB6a++HBGlTCOQQ/is/0uUFr4yP5R7oQARAQAB
=HqzY
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
ed09733fa05dedf15100abeb32bbf14af07ca77b

View File

@ -0,0 +1 @@
b46dc71e03feeb7f89d1f2491f7a8f87b9d8f501

View File

@ -0,0 +1 @@
7a1d848e7c2af85eeba69c99e7bf252cf360097e

View File

@ -0,0 +1 @@
e77417ac194160a3fabd04969a259c7ee636c5ed

View File

@ -0,0 +1,26 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFKD+PgBEAC8IkWujQlmU0/7+QPZFsc/z/rXgg7BQyo330QK4HeMzeCK6WHa
SWzVDM9h6nFDs6Xln6YexbZUjLsxS/a/Ox2i26Qg8B+NghgiratbdJsByRrU/3la
0d8eYXrKO8BU024o+go+LzJEBqOb3+bn23dwF96dyCUfnhabYz+ZbPd3VmZV5D3G
fv0vBMnQnJkToOW6fVEoqjzCpEQmSFCWe6Cryj0veci2JmFIiiLA45hwuMg3hj92
Czd+mdxcURtwm4XFfUoO32a5nAhNfrzKfz2eoV4my79MC8JA8OwQau5aksVu0Ohs
3z5IsdXi2hUqPF3s+j6BQFwSPmLo3r5XwZWTx9RAM7D6cOHWr2jW61o32t6ABSiI
cfhECTb0arEvjGtr56kD2JhgTA5GTIBGPwbdNBHMKZc4VmIFITnUlJ7MLoRv/gP6
XyCerPB4Cm6kOTcNZnm33yUMNB6GfR1/l/+3hCFP+0z4/WJ0aK10d3/9opikkmep
gmNtedS6ScgOnU3pj9UF8jEMleK47nD2njc7FhGKdB5+I59L1ri0tSUdMhpuBAEd
u497Ei/Q1rt+vkNwA8uMQgXOGka7NLpgPcNw6sDCq1fecCEpt/HgmGrHdK6pY8KE
3I1xEGP6GG5DcBs57cbZv1Jdjf3A8fIozX7Ntn+7nBCHUVEWCzaASlQYrQARAQAB
uQINBFKD+PgBEAC8ZqGlqxaPZ+Y9QNsroptbfZ8/YL/+09qEki6bJ/bPn1wwAOpf
Q57LSHryrVFZXnqMO/+oSTb6zNRvy4C5VG8Lvoc7JqGSo/fc5nfeZwFS1v58j4d+
6AfWPPmg0f4mt3JASoHqJVwsRTEQsZsuaykPulA9DUsB5/wMQXlJLU/YewcmkDig
QHw1bhG3KROTFnnFp1bWwEQ0C3zTaB9mJcrCswKUnauDIWGeR0r3ALGllPwvzr4R
cwwTLUHzaQeeRzJL39oRpU+iq/3WW4HN6at8BQ2jHiat6QidtWOQNKQTvrjybs6X
gkRskZniombGiTbDgsTp1/4BRMDb+0nRGh2z3QIj4ZPVg0d2ISf82M0AMdZpzPXX
6Jw3o/A7Tv4pJa5gHzOUTDThkOFiQROgVP65nvPt8JPBIvwL5eaG5rzDXm4iWq6a
cMnREGz7jQdC07UvVxRAbVa4mCHGJKNskRDbWdGZDT4clYFoMQbMup2CMMkObJac
OTxiZ4xy7vQWZ2obNkb37RNrIKqCFxCcuQl/9AhlkbAFFrodEqTjNHOFH0uq1/0B
uH3XiW9Xih3AZ0fL1wq7qrl2DXBIYMAbzABoQviGYoRXvApSSfuozFnV9B/y8hyJ
DQRInzHslXW/lkdrBWiBYDb9rxKKXCzE1WYYHhcw0BG8dj3T1LJ3c4NKcwARAQAB
=Irkl
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
cde577234159e222bc56e50f9c61220417aaa02e

View File

@ -22,6 +22,7 @@ plugins {
dependencies {
api(projects.buildParameters)
api(projects.verification)
api(projects.openrewrite)
api("me.champeau.jmh:me.champeau.jmh.gradle.plugin:0.7.2")
api("com.github.vlsi.crlf:com.github.vlsi.crlf.gradle.plugin:1.90")
api("com.github.vlsi.gradle-extensions:com.github.vlsi.gradle-extensions.gradle.plugin:1.90")

View File

@ -121,18 +121,14 @@ tasks.configureEach<Javadoc> {
docTitle = "Apache JMeter ${project.name} API"
windowTitle = "Apache JMeter ${project.name} API"
header = "<b>Apache JMeter</b>"
addStringOption("source", "8")
addStringOption("source", "17")
addStringOption("Xmaxwarns", "10")
addBooleanOption("Xdoclint:all,-missing", true)
val lastEditYear: String by rootProject.extra
bottom =
"Copyright &copy; 1998-$lastEditYear Apache Software Foundation. All Rights Reserved."
if (buildParameters.buildJdkVersion > 8) {
addBooleanOption("html5", true)
links("https://docs.oracle.com/en/java/javase/11/docs/api/")
} else {
links("https://docs.oracle.com/javase/8/docs/api/")
}
links("https://docs.oracle.com/en/java/javase/17/docs/api/")
}
}

View File

@ -0,0 +1,61 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
plugins {
id("build-logic.openrewrite-base")
}
dependencies {
openrewrite(platform("org.openrewrite.recipe:rewrite-recipe-bom:latest.integration"))
openrewrite("org.openrewrite.recipe:rewrite-static-analysis")
openrewrite("org.openrewrite.recipe:rewrite-testing-frameworks")
}
openrewrite {
configFile = project.rootProject.file("config/openrewrite/rewrite.yml")
failOnDryRunResults = false
activeStyles.add("org.apache.jmeter.style.Style")
// See config/openrewrite/rewrite.yml
activeRecipes.add("org.apache.jmeter.staticanalysis.CodeCleanup")
// See https://github.com/openrewrite/rewrite-static-analysis/blob/8c803a9c50b480841a4af031f60bac5ee443eb4e/src/main/resources/META-INF/rewrite/common-static-analysis.yml#L21
activeRecipes.add("org.apache.jmeter.staticanalysis.CommonStaticAnalysis")
plugins.withId("build-logic.test-junit5") {
// See https://github.com/openrewrite/rewrite-testing-frameworks/blob/47ccd370247f1171fa9df005da8a9a3342d19f3f/src/main/resources/META-INF/rewrite/junit5.yml#L18C7-L18C62
activeRecipes.add("org.openrewrite.java.testing.junit5.JUnit5BestPractices")
// See https://github.com/openrewrite/rewrite-testing-frameworks/blob/47ccd370247f1171fa9df005da8a9a3342d19f3f/src/main/resources/META-INF/rewrite/junit5.yml#L255C7-L255C60
activeRecipes.add("org.openrewrite.java.testing.junit5.CleanupAssertions")
}
}
//// See https://github.com/openrewrite/rewrite-gradle-plugin/issues/255
//tasks.withType<RewriteDryRunTask>().configureEach {
// doFirst {
// if (reportPath.exists()) {
// // RewriteDryRunTask keeps the report file if there are no violations, so we remove it
// reportPath.delete()
// }
// }
// doLast {
// if (reportPath.exists()) {
// throw GradleException(
// "The following files have format violations. " +
// "Execute ./gradlew ${path.replace("Dry", "")} to apply the changes:\n" +
// reportPath.readText()
// )
// }
// }
//}

View File

@ -0,0 +1,43 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
plugins {
id("build-logic.kotlin-dsl-gradle-plugin")
}
val latest = "latest.release"
dependencies {
api(projects.buildParameters)
api("org.openrewrite.rewrite:org.openrewrite.rewrite.gradle.plugin:6.6.3")
implementation(platform("org.openrewrite:rewrite-bom:latest.integration"))
implementation("org.openrewrite:rewrite-core")
implementation("org.openrewrite:rewrite-gradle")
implementation("org.openrewrite:rewrite-groovy")
implementation("org.openrewrite:rewrite-hcl")
implementation("org.openrewrite:rewrite-java")
implementation("org.openrewrite:rewrite-json")
implementation("org.openrewrite:rewrite-kotlin:latest.integration")
implementation("org.openrewrite:rewrite-properties")
implementation("org.openrewrite:rewrite-protobuf")
implementation("org.openrewrite:rewrite-xml")
implementation("org.openrewrite:rewrite-yaml")
implementation("org.openrewrite:rewrite-polyglot:latest.integration")
// implementation("com.puppycrawl.tools:checkstyle:9.3")
implementation("org.jetbrains.kotlin.kapt:org.jetbrains.kotlin.kapt.gradle.plugin:1.9.22")
}

View File

@ -0,0 +1,101 @@
import org.apache.jmeter.buildtools.openrewrite.OpenRewriteExtension
import org.apache.jmeter.buildtools.openrewrite.OpenRewriteProcessTask
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
val openrewrite by configurations.creating {
description = "OpenRewrite dependencies"
isCanBeConsumed = false
isCanBeResolved = false
}
val openrewriteClasspath by configurations.creating {
description = "OpenRewrite classpath"
isCanBeConsumed = false
isCanBeResolved = true
extendsFrom(openrewrite)
attributes {
// TODO: add toolchain and prefer the relevant JVM target variant
attribute(
Bundling.BUNDLING_ATTRIBUTE,
project.objects.named(Bundling::class.java, Bundling.EXTERNAL)
)
attribute(
TargetJvmEnvironment.TARGET_JVM_ENVIRONMENT_ATTRIBUTE,
project.objects.named(TargetJvmEnvironment::class.java, TargetJvmEnvironment.STANDARD_JVM)
)
}
}
val openrewriteExtension = project.extensions.create<OpenRewriteExtension>(OpenRewriteExtension.NAME)
val rewriteRun by tasks.registering(OpenRewriteProcessTask::class) {
}
val rewriteDryRun by tasks.registering {
}
plugins.withId("java") {
val java = project.the<JavaPluginExtension>()
java.sourceSets.whenObjectRemoved {
val removedName = name
rewriteRun.configure {
sourceSets.remove(sourceSets[removedName])
}
}
java.sourceSets.all {
val sourceSet = this
rewriteRun.configure {
sourceSets.create(sourceSet.name) {
compileClasspath.from(sourceSet.compileClasspath)
compileClasspath.from(sourceSet.output.classesDirs)
javaRelease.set(
tasks.named<JavaCompile>(sourceSet.compileJavaTaskName)
.flatMap { it.options.release }
)
srcDirSets.create("resources") {
sourceDirectories.from(sourceSet.resources.sourceDirectories)
filter = sourceSet.resources.filter
}
srcDirSets.create("java") {
sourceDirectories.from(sourceSet.java.sourceDirectories)
filter = sourceSet.java.filter
}
}
}
}
}
plugins.withId("org.jetbrains.kotlin.jvm") {
val java = project.the<JavaPluginExtension>()
java.sourceSets.all {
val sourceSet = this
val kotlin: SourceDirectorySet by (sourceSet as ExtensionAware).extensions
rewriteRun.configure {
sourceSets.named(sourceSet.name) {
srcDirSets.create("kotlin") {
sourceDirectories.from(kotlin.sourceDirectories)
filter = kotlin.filter
// Kotlin source set includes java, however OpenRewrite does not need it for Kotlin.
// OpenRewrite uses compiled classes instead to get Java types
includes.add("**/*.kt")
}
}
}
}
}

View File

@ -0,0 +1,39 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jmeter.buildtools.openrewrite
import org.gradle.api.model.ObjectFactory
import org.gradle.kotlin.dsl.property
import org.gradle.kotlin.dsl.setProperty
import javax.inject.Inject
open class OpenRewriteExtension @Inject constructor(objects: ObjectFactory) {
companion object {
const val NAME = "openrewrite"
}
val configFile = objects.fileProperty()
val activeStyles = objects.setProperty<String>()
val activeRecipes = objects.setProperty<String>()
val failOnDryRunResults = objects.property<Boolean>().convention(true)
val resourceRecipes = objects.setProperty<String>()
}

View File

@ -0,0 +1,122 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jmeter.buildtools.openrewrite
import org.gradle.api.DefaultTask
import org.gradle.api.file.ProjectLayout
import org.gradle.api.internal.file.FileOperations
import org.gradle.api.model.ObjectFactory
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.Classpath
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.Nested
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.TaskAction
import org.gradle.kotlin.dsl.domainObjectContainer
import org.gradle.kotlin.dsl.listProperty
import org.gradle.kotlin.dsl.submit
import org.gradle.kotlin.dsl.the
import org.gradle.workers.WorkerExecutionException
import org.gradle.workers.WorkerExecutor
import javax.inject.Inject
@CacheableTask
abstract class OpenRewriteProcessTask @Inject constructor(
objects: ObjectFactory,
private val layout: ProjectLayout,
private val executor: WorkerExecutor,
private val fileOperations: FileOperations,
) : DefaultTask() {
@Input
val activeRecipes = objects.listProperty<String>().convention(
project.the<OpenRewriteExtension>().activeRecipes
)
@Classpath
val rewriteRuntimeClasspath = objects.fileCollection()
.from(project.configurations.named("openrewriteClasspath"))
@InputFile
@PathSensitive(PathSensitivity.NONE)
val configFile = objects.fileProperty().convention(
project.the<OpenRewriteExtension>().configFile
)
@get:Nested
val sourceSets = objects.domainObjectContainer(SourceSetConfig::class)
@OutputDirectory
val outputDirectory = objects.directoryProperty()
.convention(project.layout.buildDirectory.dir("openrewrite/$name/formatted"))
init {
// Gradle does not have FileSystemOperations.fileTree, so we can't have .files initialization
// in SourceDirectorySetConfig
sourceSets.all {
srcDirSets.all {
files.set(
project.provider {
sourceDirectories.map {
project.fileTree(it) {
matching(filter)
include(includes)
}
}
}
)
}
}
}
@TaskAction
fun run() {
val outputDir = outputDirectory.get().asFile
// Currently the task is not incremental, so we delete previous data
fileOperations.delete(outputDir)
fileOperations.mkdir(outputDir)
val queue = executor.processIsolation {
classpath.from(rewriteRuntimeClasspath)
}
val taskProps = this
queue.submit(OpenRewriteWork::class) {
logCompilationWarningsAndErrors.set(true)
outputDirectory.set(taskProps.outputDirectory)
baseDir.set(layout.buildDirectory)
configFile.set(taskProps.configFile)
activeRecipes.set(taskProps.activeRecipes)
rewriteRuntimeClasspath.set(taskProps.rewriteRuntimeClasspath)
taskProps.sourceSets.all {
sourceSets.add(toSnapshot())
}
}
try {
queue.await()
} catch (e: WorkerExecutionException) {
// The queue has classpath isolation, so `it is RewriteException` can't be used here
// e.causes?.singleOrNull()?.cause
// ?.takeIf { it::class.qualifiedName == RewriteException::class.qualifiedName }
// ?.let { throw it }
throw e
}
}
}

View File

@ -0,0 +1,391 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jmeter.buildtools.openrewrite
import org.gradle.api.Named
import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.ConfigurableFileTree
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.Property
import org.gradle.api.provider.ProviderFactory
import org.gradle.api.provider.SetProperty
import org.gradle.api.tasks.Classpath
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.Nested
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.util.PatternFilterable
import org.gradle.workers.WorkAction
import org.gradle.workers.WorkParameters
import org.openrewrite.ExecutionContext
import org.openrewrite.InMemoryExecutionContext
import org.openrewrite.Parser
import org.openrewrite.RecipeRun
import org.openrewrite.Result
import org.openrewrite.SourceFile
import org.openrewrite.Tree
import org.openrewrite.Validated
import org.openrewrite.config.Environment
import org.openrewrite.config.OptionDescriptor
import org.openrewrite.config.RecipeDescriptor
import org.openrewrite.config.YamlResourceLoader
import org.openrewrite.gradle.isolated.ResultsContainer
import org.openrewrite.gradle.isolated.deleted
import org.openrewrite.gradle.isolated.generated
import org.openrewrite.gradle.isolated.moved
import org.openrewrite.gradle.isolated.refactoredInPlace
import org.openrewrite.internal.InMemoryLargeSourceSet
import org.openrewrite.java.JavaParser
import org.openrewrite.java.internal.JavaTypeCache
import org.openrewrite.java.marker.JavaVersion
import org.openrewrite.java.style.Autodetect
import org.openrewrite.java.tree.J
import org.openrewrite.kotlin.KotlinParser
import org.openrewrite.kotlin.tree.K
import org.openrewrite.tree.ParsingExecutionContextView
import org.openrewrite.xml.tree.Xml
import org.slf4j.LoggerFactory
import java.io.File
import java.io.Serializable
import java.net.URL
import java.util.*
import java.util.zip.ZipFile
import javax.inject.Inject
import kotlin.system.measureTimeMillis
abstract class SourceSetConfig(
private val name: String,
) : Named, Serializable {
@Internal
override fun getName(): String = name
@get:Input
abstract val javaRelease: Property<Int>
@get:Nested
abstract val srcDirSets: NamedDomainObjectContainer<SourceDirectorySetConfig>
@get:Classpath
abstract val compileClasspath: ConfigurableFileCollection
}
abstract class SourceDirectorySetConfig(
private val name: String,
) : Named, Serializable {
@Internal
override fun getName(): String = name
@get:Internal
abstract val sourceDirectories: ConfigurableFileCollection
@get:Internal
lateinit var filter: PatternFilterable
@get:Internal
abstract val includes: SetProperty<String>
@get:Inject
abstract val providers: ProviderFactory
@get:InputFiles
@get:PathSensitive(PathSensitivity.RELATIVE)
abstract val files: SetProperty<ConfigurableFileTree>
}
fun SourceSetConfig.toSnapshot() =
SourceSetSnapshot(
name = name,
javaRelease = javaRelease.get(),
srcDirSets = srcDirSets.associateBy({ it.name }) { it.toSnapshot() },
compileClasspath = compileClasspath.elements.get()
.mapNotNullTo(mutableSetOf()) { it.asFile.takeIf { it.exists() } },
)
fun SourceDirectorySetConfig.toSnapshot() =
SourceDirectorySetSnapshot(
name = name,
// TODO: this causes serializing the file names
files = files.get().mapNotNull {
SourceDirectorySetFilesSnapshot(
baseDir = it.dir,
files = it.files,
).takeIf { it.files.isNotEmpty() }
}
)
data class SourceSetSnapshot(
val name: String,
val javaRelease: Int,
val srcDirSets: Map<String, SourceDirectorySetSnapshot>,
val compileClasspath: Set<File>,
) : Serializable
data class SourceDirectorySetSnapshot(
val name: String,
val files: List<SourceDirectorySetFilesSnapshot>,
) : Serializable
data class SourceDirectorySetFilesSnapshot(
val baseDir: File,
val files: Set<File>,
) : Serializable
interface OpenRewriteParameters : WorkParameters {
val outputDirectory: DirectoryProperty
val baseDir: DirectoryProperty
val configFile: RegularFileProperty
val activeRecipes: SetProperty<String>
val sourceSets: SetProperty<SourceSetSnapshot>
val rewriteRuntimeClasspath: SetProperty<File>
val logCompilationWarningsAndErrors: Property<Boolean>
}
abstract class OpenRewriteWork : WorkAction<OpenRewriteParameters> {
companion object {
val logger = LoggerFactory.getLogger(OpenRewriteWork::class.java) as org.gradle.api.logging.Logger
}
// @get:Inject
// abstract val fileOperations: FileOperations
override fun execute() {
val view = ParsingExecutionContextView.view(
InMemoryExecutionContext { logger.warn("Error rewriting", it) }
)
val results = listResults(view)
run2(results, view)
}
fun run2(results: ResultsContainer, view: ParsingExecutionContextView) {
if (!results.isNotEmpty) {
return
}
results.firstException?.let {
throw it
}
for (result: Result in results.generated) {
logger.lifecycle("Generated new file " + result.after!!.sourcePath + " by:")
logRecipesThatMadeChanges(result)
}
for (result: Result in results.deleted) {
logger.lifecycle("Deleted file " + result.before!!.sourcePath + " by:")
logRecipesThatMadeChanges(result)
}
for (result: Result in results.moved) {
logger.lifecycle(
"File has been moved from " +
result.before!!.sourcePath + " to " +
result.after!!.sourcePath + " by:"
)
logRecipesThatMadeChanges(result)
}
for (result: Result in results.refactoredInPlace) {
logger.lifecycle("Changes have been made to " + result.before!!.sourcePath + " by:")
logRecipesThatMadeChanges(result)
}
}
private fun logRecipesThatMadeChanges(result: Result) {
val indent = " "
var prefix = " "
for (recipeDescriptor in result.recipeDescriptorsThatMadeChanges) {
logRecipe(recipeDescriptor, prefix)
prefix += indent
}
}
private fun logRecipe(rd: RecipeDescriptor, prefix: String) {
val recipeString = StringBuilder(prefix + rd.name)
if (rd.options.isNotEmpty()) {
val opts = rd.options
.mapNotNull { option: OptionDescriptor ->
if (option.value != null) {
option.name + "=" + option.value
} else {
null
}
}
.joinToString(", ")
if (opts.isNotEmpty()) {
recipeString.append(": {").append(opts).append("}")
}
}
logger.warn("{}", recipeString)
for (rChild in rd.recipeList) {
logRecipe(rChild, "$prefix ")
}
}
private fun listResults(ctx: ExecutionContext): ResultsContainer {
val baseDir = parameters.baseDir.get().asFile.toPath()
val env = createEnvironment()
val recipe = env.activateRecipes(parameters.activeRecipes.get());
if (recipe.recipeList.isEmpty()) {
logger.warn("No recipes were activated. Activate a recipe with rewriteTask.activeRecipes.add(\"com.fully.qualified.RecipeClassName\") in your build file")
return ResultsContainer(baseDir, null)
}
val validated = recipe.validateAll(ctx, mutableListOf<Validated<Any>>())
val failedValidations = validated.flatMap {
it.failures().map { failure ->
IllegalArgumentException(
"Recipe validation error in ${failure.property}: ${failure.message}",
failure.exception
)
}
}
if (failedValidations.size == 1) {
throw failedValidations.first()
} else if (failedValidations.size > 1) {
throw IllegalArgumentException(
"Multiple recipe failed validations: ${failedValidations.map { it.toString() }}"
).apply {
failedValidations.forEach { addSuppressed(it) }
}
}
val javaDetector = Autodetect.detector()
val kotlinDetector = org.openrewrite.kotlin.style.Autodetect.detector()
val xmlDetector = org.openrewrite.xml.style.Autodetect.detector()
var sourceFiles = parse(ctx)
.onEach { s ->
when (s) {
is K.CompilationUnit ->
kotlinDetector.sample(s)
is J.CompilationUnit ->
javaDetector.sample(s)
else ->
xmlDetector.sample(s)
}
}
.toList()
val stylesByType = mapOf(
J.CompilationUnit::class.java to javaDetector.build(),
K.CompilationUnit::class.java to kotlinDetector.build(),
Xml.Document::class.java to xmlDetector.build(),
)
sourceFiles = sourceFiles.map {
for ((klass, format) in stylesByType) {
if (klass.isInstance(it)) {
return@map it.withMarkers<SourceFile>(it.markers.add(format))
}
}
it
}
// logger.lifecycle(
// "All sources parsed, running active recipes: {}",
// recipe.recipeList.joinToString(", ")
// )
val recipeRun = recipe.run(InMemoryLargeSourceSet(sourceFiles), ctx)
return ResultsContainer(baseDir, recipeRun)
}
private fun createEnvironment() = Environment.builder()
.apply {
parameters.rewriteRuntimeClasspath.get().forEach { cpFile ->
if (cpFile.isFile && cpFile.path.endsWith(".jar", ignoreCase = true)) {
val baseUrl by lazy { URL(cpFile.toURI().toURL(), "!/") }
ZipFile(cpFile).use { zip ->
zip.entries().asSequence().forEach { ze ->
if (ze.name.startsWith("META-INF/rewrite/") && (
ze.name.endsWith(".yml", ignoreCase = true) ||
ze.name.endsWith(".yaml", ignoreCase = true)
)
) {
zip.getInputStream(ze).use {
val uri = URL(baseUrl, ze.name).toURI()
load(YamlResourceLoader(it, uri, Properties(), this::class.java.classLoader))
}
}
}
}
}
}
val configFile = parameters.configFile.asFile.get()
configFile.inputStream().use { stream ->
load(YamlResourceLoader(stream, configFile.toURI(), Properties(), this::class.java.classLoader))
}
}
.build()
private fun parse(ctx: ExecutionContext): Sequence<SourceFile> {
var res = sequenceOf<SourceFile>()
for (sourceSet in parameters.sourceSets.get()) {
val javaTypeCache = JavaTypeCache()
val javaVersion = JavaVersion(
Tree.randomId(),
System.getProperty("java.runtime.version"),
System.getProperty("java.vm.vendor"),
sourceSet.javaRelease.toString(),
sourceSet.javaRelease.toString()
)
fun Parser.parse(srcDirSet: SourceDirectorySetSnapshot) {
srcDirSet.files.forEach { root ->
val files = root.files.filter { it.path.endsWith(".kt") }.map { it.toPath() }
if (files.isEmpty()) {
return@forEach
}
logger.lifecycle("Parsing {} files in {}: {}", files.size, root.baseDir, files)
res = res.plus(
parse(files, root.baseDir.toPath(), ctx).iterator()
.asSequence()
.map {
it.withMarkers(it.markers.add(javaVersion))
}
)
}
}
sourceSet.srcDirSets["java"]?.let { srcDirSet ->
val parser = JavaParser.fromJavaVersion()
.classpath(sourceSet.compileClasspath.map { it.toPath() })
// .styles(styles)
.typeCache(javaTypeCache)
.logCompilationWarningsAndErrors(parameters.logCompilationWarningsAndErrors.get())
.build()
parser.parse(srcDirSet)
}
sourceSet.srcDirSets["kotlin"]?.let { srcDirSet ->
val parser = KotlinParser.builder()
.classpath(sourceSet.compileClasspath.map { it.toPath() })
// .styles(styles)
.typeCache(javaTypeCache)
.logCompilationWarningsAndErrors(parameters.logCompilationWarningsAndErrors.get())
.build()
parser.parse(srcDirSet)
}
}
return res
}
}

View File

@ -0,0 +1,30 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.openrewrite.gradle.isolated
public val ResultsContainer.generated: List<org.openrewrite.Result>
get() = this.generated
public val ResultsContainer.deleted: List<org.openrewrite.Result>
get() = this.deleted
public val ResultsContainer.moved: List<org.openrewrite.Result>
get() = this.moved
public val ResultsContainer.refactoredInPlace: List<org.openrewrite.Result>
get() = this.refactoredInPlace

View File

@ -46,6 +46,7 @@ include("basics")
include("batchtest")
include("build-parameters")
include("jvm")
include("openrewrite")
include("publishing")
include("root-build")
include("verification")

View File

@ -22,7 +22,7 @@ plugins {
dependencies {
api(projects.basics)
api(projects.buildParameters)
api("com.github.autostyle:com.github.autostyle.gradle.plugin:3.2")
api("com.github.autostyle:com.github.autostyle.gradle.plugin:4.0")
api("com.github.spotbugs:com.github.spotbugs.gradle.plugin:6.0.4")
api("com.github.vlsi.ide:com.github.vlsi.ide.gradle.plugin:1.90")
api("com.github.vlsi.gradle-extensions:com.github.vlsi.gradle-extensions.gradle.plugin:1.90")

View File

@ -74,8 +74,6 @@ plugins.withId("java") {
autostyle {
java {
license()
importOrder("static ", "java.", "javax", "org", "net", "com", "")
removeUnusedImports()
indentWithSpaces(4)
}
}

View File

@ -15,6 +15,8 @@
* limitations under the License.
*/
import com.github.autostyle.gradle.AutostyleTask
import de.thetaphi.forbiddenapis.gradle.CheckForbiddenApis
import org.gradle.kotlin.dsl.apply
import org.gradle.language.base.plugins.LifecycleBasePlugin
@ -26,6 +28,14 @@ if (!buildParameters.skipAutostyle) {
apply(plugin = "build-logic.autostyle")
}
// OpenRewrite Gradle plugin applies to allprojects when it is applied to the root project
// So the workaround is to avoid applying openrewrite to the root
val skipOpenrewrite = project == rootProject || buildParameters.skipOpenrewrite
if (!skipOpenrewrite) {
apply(plugin = "build-logic.openrewrite")
}
val skipCheckstyle = buildParameters.skipCheckstyle || run {
logger.info("Checkstyle requires Java 11+")
buildParameters.buildJdkVersion < 11
@ -61,13 +71,16 @@ if (!skipCheckstyle && !buildParameters.skipAutostyle) {
}
}
if (!buildParameters.skipAutostyle || !skipCheckstyle || !buildParameters.skipForbiddenApis) {
if (!buildParameters.skipAutostyle || !skipCheckstyle || !buildParameters.skipForbiddenApis || !skipOpenrewrite) {
tasks.register("style") {
group = LifecycleBasePlugin.VERIFICATION_GROUP
description = "Formats code (license header, import order, whitespace at end of line, ...) and executes Checkstyle verifications"
if (!buildParameters.skipAutostyle) {
dependsOn("autostyleApply")
}
if (!skipOpenrewrite) {
dependsOn("rewriteRun")
}
if (!skipCheckstyle) {
dependsOn("checkstyleAll")
}
@ -75,6 +88,23 @@ if (!buildParameters.skipAutostyle || !skipCheckstyle || !buildParameters.skipFo
dependsOn("forbiddenApis")
}
}
tasks.register("styleCheck") {
group = LifecycleBasePlugin.VERIFICATION_GROUP
description = "Report code style violations (license header, import order, whitespace at end of line, ...)"
if (!buildParameters.skipAutostyle) {
dependsOn("autostyleCheck")
}
if (!skipOpenrewrite) {
dependsOn("rewriteDryRun")
}
if (!skipCheckstyle) {
dependsOn("checkstyleAll")
}
if (!buildParameters.skipForbiddenApis) {
dependsOn("forbiddenApis")
}
}
}
tasks.register("checkstyle") {
@ -90,3 +120,22 @@ tasks.register("checkstyle") {
dependsOn("forbiddenApis")
}
}
// OpenRewrite fixes many warnings, so it should run the first
if (!skipOpenrewrite) {
if (!buildParameters.skipForbiddenApis) {
tasks.withType<CheckForbiddenApis>().configureEach {
mustRunAfter("rewriteRun", "rewriteDryRun")
}
}
if (!buildParameters.skipCheckstyle) {
tasks.withType<Checkstyle>().configureEach {
mustRunAfter("rewriteRun", "rewriteDryRun")
}
}
if (!buildParameters.skipAutostyle) {
tasks.withType<AutostyleTask>().configureEach {
mustRunAfter("rewriteRun", "rewriteDryRun")
}
}
}

View File

@ -11,14 +11,19 @@
<trusted-key id='dcba03381ef6c89096acd985ac5ec74981f9cda6' group='com.beust' />
<trusted-key id='28118c070cb22a0175a2e8d43d12ca2ac19f3181' group='com.fasterxml.jackson.core' />
<trusted-key id='8a10792983023d5d14c93b488d7f1bec1e2ecae7' group='com.fasterxml.jackson.core' />
<trusted-key id='28118c070cb22a0175a2e8d43d12ca2ac19f3181' group='com.fasterxml.jackson.dataformat' />
<trusted-key id='8a10792983023d5d14c93b488d7f1bec1e2ecae7' group='com.fasterxml.jackson.dataformat' />
<trusted-key id='28118c070cb22a0175a2e8d43d12ca2ac19f3181' group='com.fasterxml.jackson.datatype' />
<trusted-key id='28118c070cb22a0175a2e8d43d12ca2ac19f3181' group='com.fasterxml.jackson.module' />
<trusted-key id='8a10792983023d5d14c93b488d7f1bec1e2ecae7' group='com.fasterxml.jackson.module' />
<trusted-key id='28118c070cb22a0175a2e8d43d12ca2ac19f3181' group='com.fasterxml.woodstox' />
<trusted-key id='8a10792983023d5d14c93b488d7f1bec1e2ecae7' group='com.fasterxml.woodstox' />
<trusted-key id='58f086abb0ede8f7a04b76c34c00043bec5cb7cb' group='com.fifesoft' />
<trusted-key id='4ac55a85d30c3499a3219500b7e2662a7640a051' group='com.formdev' />
<trusted-key id='8756c4f765c9ac3cb6b85d62379ce192d401ab61' group='com.formdev' />
<trusted-key id='d112630c899f508198c09018105cb91cac2aee0e' group='com.github.autostyle' />
<trusted-key id='635ee627345f3c1dd422b2e207d3516820bcf6b1' group='com.github.ben-manes.caffeine' />
<trusted-key id='2655176f748fd83725b4805ff2a01147d830c125' group='com.github.docker-java' />
<trusted-key id='55e770230e69cc6de143fb5b62c82e50836eb3ee' group='com.github.gundy' />
<trusted-key id='253e8e4c6fb28d11748115c1249dee8e2c07a0a2' group='com.github.javaparser' />
<trusted-key id='fc2c31fc25fede4e7ad0d18c2bfd7825a8984fbe' group='com.github.javaparser' />
@ -85,16 +90,23 @@
<trusted-key id='2db4f1ef0fa761ecc4ea935c86fdc7e2a11262cb' group='commons-net' />
<trusted-key id='0186f8b24c5bc02c94a0e0e486f75e83e1ee085f' group='de.thetaphi' />
<trusted-key id='1fa37fbe4453c1073e7ef61d6449005f96bc97a3' group='de.undercouch' />
<trusted-key id='cde577234159e222bc56e50f9c61220417aaa02e' group='dev.failsafe' />
<trusted-key id='3e1ac64f4e34e290503c90323449ec3ac2efe8aa' group='dnsjava' />
<trusted-key id='8756c4f765c9ac3cb6b85d62379ce192d401ab61' group='info.picocli' />
<trusted-key id='aa417737bd805456db3cbdde6601e5c08dccbb96' group='info.picocli' />
<trusted-key id='c62c0ce2e5c346b2d9bf2d8bb2ca0dfe9ed21c6e' group='io.burt' />
<trusted-key id='1ab9bdf40ed49debb5caaded5b30d3b10694f057' group='io.codearte.gradle.nexus' />
<trusted-key id='1f47744c9b6e14f2049c2857f1f111af65925306' group='io.github.classgraph' />
<trusted-key id='7186bbf993566d8c2f4f7ed7d945e643368fef62' group='io.github.eisop' />
<trusted-key id='ed09733fa05dedf15100abeb32bbf14af07ca77b' group='io.github.fastfilter' />
<trusted-key id='d477d51812e692011db11e66a6ea2e2bf22e0543' group='io.github.java-diff-utils' />
<trusted-key id='e52567d2589415bd74eb4c2867631bc0568801c3' group='io.github.microutils' />
<trusted-key id='8756c4f765c9ac3cb6b85d62379ce192d401ab61' group='io.github.resilience4j' />
<trusted-key id='050a37a2e0577f4baa095b52602ec18d20c4661c' group='io.github.x-stream' />
<trusted-key id='48b086a7d843cfa258e83286928fbf39003c0425' group='io.micrometer' />
<trusted-key id='59b06224fd8912e36603be79fefe78456eddc34a' group='io.mockk' />
<trusted-key id='7119b89feb81209430e65c62c2ad9c8a7d4e988a' group='io.quarkus.gizmo' />
<trusted-key id='1d339b6a68ae2e8daeda65d5276962ca56e73c81' group='io.vavr' />
<trusted-key id='6dd3b8c64ef75253beb2c53ad908a43fb7ec07ac' group='jakarta.activation' />
<trusted-key id='a1483f88ba771993ab609c43590c2310cee1c9be' group='jakarta.jms' />
<trusted-key id='fc411cd3cb7dcb0abc9801058118b3bcdb1a5000' group='jakarta.xml.bind' />
@ -170,10 +182,12 @@
<trusted-key id='7c669810892cbd3148fa92995b05ccde140c2876' group='org.eclipse.jgit' />
<trusted-key id='1def9646901a1652e5b3e5ea694db6f419c8d1fd' group='org.exparity' />
<trusted-key id='13ac2213964abe1d1c147c0e1939a2520bab1d90' group='org.freemarker' />
<trusted-key id='bd3b8aab16ea001cda79d4773e8a7f8a3597e7fb' group='org.functionaljava' />
<trusted-key id='e5b8247af8a619a28f90fdfc9ff25980f5ba7e4f' group='org.fusesource.hawtbuf' />
<trusted-key id='1bd97a6a154e7810ee0bc832e2f38302c8075e3d' group='org.gradle.kotlin' />
<trusted-key id='4db1a49729b053caf015cee9a6adfc93ef34893e' group='org.hamcrest' />
<trusted-key id='e3a9f95079e84ce201f7cf60bede11eaf1164480' group='org.hamcrest' />
<trusted-key id='e113159331a1f87bfc2a93d0960d2e8635a91268' group='org.hdrhistogram' />
<trusted-key id='d76260c72df74e66268f7770ab049df4ab24c1ef' group='org.hsqldb' />
<trusted-key id='a413f67d71beec23add0ce0acb43338e060cf9fa' group='org.jacoco' />
<trusted-key id='e5c3b1929191df06136ccb2b164779204e106a76' group='org.javassist' />
@ -195,11 +209,17 @@
<trusted-key id='ff6e2c001948c5f2f38b0cc385911f425ec61b51' group='org.junit.jupiter' />
<trusted-key id='ff6e2c001948c5f2f38b0cc385911f425ec61b51' group='org.junit.platform' />
<trusted-key id='ff6e2c001948c5f2f38b0cc385911f425ec61b51' group='org.junit.vintage' />
<trusted-key id='7a1d848e7c2af85eeba69c99e7bf252cf360097e' group='org.latencyutils' />
<trusted-key id='08ba61cf501c09f70911b83b82216a03caa86c78' group='org.mongodb' />
<trusted-key id='e9af5293c334c7c0b583227d2f45f85cdf082e68' group='org.mozilla' />
<trusted-key id='07a4fa67a8222f1b39f9edaef8052e4e1bd0db31' group='org.neo4j.driver' />
<trusted-key id='e85aed155021af8a6c6b7a4a7c7d8456294423ba' group='org.objenesis' />
<trusted-key id='019082bc00e0324e2aef4cf00d3b328562a119a7' group='org.openjdk.jmh' />
<trusted-key id='f36ca0c4b500f0cdde0c5aa1913f763cd0f9cfd8' group='org.openrewrite' />
<trusted-key id='f36ca0c4b500f0cdde0c5aa1913f763cd0f9cfd8' group='org.openrewrite.gradle.tooling' />
<trusted-key id='f36ca0c4b500f0cdde0c5aa1913f763cd0f9cfd8' group='org.openrewrite.meta' />
<trusted-key id='f36ca0c4b500f0cdde0c5aa1913f763cd0f9cfd8' group='org.openrewrite.recipe' />
<trusted-key id='f36ca0c4b500f0cdde0c5aa1913f763cd0f9cfd8' group='org.openrewrite.tools' />
<trusted-key id='ff6e2c001948c5f2f38b0cc385911f425ec61b51' group='org.opentest4j' />
<trusted-key id='a5bd02b93e7a40482eb1d66a5f69ad087600b22c' group='org.ow2.asm' />
<trusted-key id='908366594e746bf3c449f5622be5d98f751f4136' group='org.pcollections' />
@ -207,16 +227,20 @@
<trusted-key id='50a628ffaf58480736b1079fd1031d14464180e0' group='org.reactivestreams' />
<trusted-key id='a33a0b49a4c1ab590b0a4ddc1364c5e2df3e99c5' group='org.reactivestreams' />
<trusted-key id='3f2a008a91d11a7fac4a0786f13d3e721d56bd54' group='org.reflections' />
<trusted-key id='8756c4f765c9ac3cb6b85d62379ce192d401ab61' group='org.rnorth.duct-tape' />
<trusted-key id='475f3b8e59e6e63aa78067482c7b12f2a511e325' group='org.slf4j' />
<trusted-key id='60200ac4ae761f1614d6c46766d68daa073be985' group='org.slf4j' />
<trusted-key id='2b1042677fd8190c7b9fc0dc2161d72e7dcd4258' group='org.sonarsource.scanner.api' />
<trusted-key id='f1182e81c792928921dbcab4cfca4a29d26468de' group='org.sonarsource.scanner.api' />
<trusted-key id='8756c4f765c9ac3cb6b85d62379ce192d401ab61' group='org.springframework' />
<trusted-key id='e2acb037933cdeaab7bf77d49a2c7a98e457c53d' group='org.springframework' />
<trusted-key id='2655176f748fd83725b4805ff2a01147d830c125' group='org.testcontainers' />
<trusted-key id='7cd52b5a8295137c88fb5748dddafa7674e54418' group='org.testng' />
<trusted-key id='fa1703b1d287caea3a60f931e0130a3ed5a2079e' group='org.webjars' />
<trusted-key id='56b505dc8a29c69138a430b9429c8816dea04cdb' group='org.xerial.snappy' />
<trusted-key id='4c5f68d09d42ba7fac888df9a929ea2321fdbf8f' group='org.xmlresolver' />
<trusted-key id='ce8075a251547bee249bc151a2115ae15f6b8b72' group='org.xmlunit' />
<trusted-key id='120d6f34e627ed3a772ebbfe55c7e5e701832382' group='org.yaml' />
<trusted-key id='2db4f1ef0fa761ecc4ea935c86fdc7e2a11262cb' group='xalan' />
<trusted-key id='e5b8247af8a619a28f90fdfc9ff25980f5ba7e4f' group='xalan' />
<trusted-key id='6cb87b18a453990eac9453f87d713008cc07e9ad' group='xerces' />
@ -322,6 +346,9 @@
<dependency group='org.gradle.kotlin' module='gradle-kotlin-dsl-plugins' version='4.1.2'>
<sha512>B23C4355CBAB2098506528D196F6C9A71D4689F4A3334494B97D9F6D868883D429D851FC319761C25ACC86F0C4E02F028B33C1868B6EF7BA1246E3D79ADF1582</sha512>
</dependency>
<dependency group='org.jboss' module='jandex' version='2.4.2.Final'>
<sha512>635642582701F6AE26DF91E39D5BFD9345C4C219DA73E71A27F4740A4C0C7970F52CEF667BB9CC4DD08C26D9B0447EE003C9E56D5EDE68870976356C2FCC4A5C</sha512>
</dependency>
<dependency group='org.jetbrains.kotlin' module='kotlin-gradle-plugin' version='1.8.21'>
<sha512>09D6B646399888DBD6498D24C2B6FABBEF49444FD0710E8F93FE266FFFD11A4A2C1CFEE3431D52AD03CA781E2EFAB60896DCA53AE56924AA0C48F9C85FCE66BB</sha512>
</dependency>
@ -346,6 +373,9 @@
<dependency group='org.nosphere.apache' module='creadur-rat-gradle' version='0.8.1'>
<sha512>397C3257C5448C26304B312212F6DA1649AD15E52CE0419C5BA647F8A68864707A0C8071FA9860C28AA9D626D66C8FAF2D5F576E693F9D01B0F71EEEB84B57FB</sha512>
</dependency>
<dependency group='org.openrewrite' module='plugin' version='6.6.3'>
<sha512>FAE9431F2ADE6A8460C7E86AC5FA4AB7A2E11DB919BB9C60F59BD684CF5AF42A9D0DBFD4835AC8450F0F5B36258B6DF1920E445F84CBD3CFE2944F4CE430DF58</sha512>
</dependency>
<dependency group='org.ow2.asm' module='asm-analysis' version='6.2.1'>
<sha512>BE273F8E886BBCFDA81180917145996AB8FD26A17264EBEB5E1FC2337950A309D64DC8CBD373220009728622A8CBF56B8578E960B5561C22EA66848D296AE44E</sha512>
</dependency>

View File

@ -0,0 +1,163 @@
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to you under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
---
# See reference at https://docs.openrewrite.org/concepts-explanations/styles#declarative-styles
type: specs.openrewrite.org/v1beta/style
name: org.apache.jmeter.style.Style
styleConfigs:
- org.openrewrite.java.style.TabsAndIndentsStyle:
# See https://github.com/openrewrite/rewrite/issues/3666
# For now, it should be the same as in .editorconfig
useTabCharacter: false
tabSize: 2
indentSize: 2
continuationIndent: 4
- org.openrewrite.java.style.SpacesStyle:
# See https://github.com/openrewrite/rewrite/blob/1d0aeec11e2d7f239f2f656bfd964b17ca8e4d17/rewrite-java/src/main/java/org/openrewrite/java/style/SpacesStyle.java#L26C14-L26C25
other:
afterForSemicolon: true
- org.openrewrite.java.style.NoWhitespaceAfterStyle:
# This is to workaround https://github.com/openrewrite/rewrite/issues/3869
arrayDeclarator: false
- org.openrewrite.java.style.ImportLayoutStyle:
classCountToUseStarImport: 999
nameCountToUseStarImport: 999
# The order of the imports should match ij_java_imports_layout in .editorconfig
layout:
- import static all other imports
- <blank line>
- import java.*
- <blank line>
- import javax.*
- <blank line>
- import org.*
- <blank line>
- import net.*
- <blank line>
- import com.*
- <blank line>
- import all other imports
---
type: specs.openrewrite.org/v1beta/recipe
name: org.apache.jmeter.staticanalysis.CodeCleanup
displayName: Code cleanup
description: Automatically cleanup code, e.g. remove unnecessary parentheses, simplify expressions.
recipeList:
# The list is taken from https://github.com/openrewrite/rewrite-static-analysis/blob/8c803a9c50b480841a4af031f60bac5ee443eb4e/src/main/resources/META-INF/rewrite/static-analysis.yml#L16C1-L42
- org.openrewrite.staticanalysis.DefaultComesLast
- org.openrewrite.staticanalysis.EmptyBlock
- org.openrewrite.java.format.EmptyNewlineAtEndOfFile
- org.openrewrite.staticanalysis.ForLoopControlVariablePostfixOperators
- org.openrewrite.staticanalysis.FinalizePrivateFields
- org.openrewrite.java.format.MethodParamPad
- org.openrewrite.java.format.NoWhitespaceAfter
- org.openrewrite.java.format.NoWhitespaceBefore
- org.openrewrite.java.format.PadEmptyForLoopComponents
- org.openrewrite.staticanalysis.TypecastParenPad
- org.openrewrite.staticanalysis.EqualsAvoidsNull
- org.openrewrite.staticanalysis.ExplicitInitialization
- org.openrewrite.staticanalysis.FallThrough
# It breaks backward compatibility, so
# - org.openrewrite.staticanalysis.HideUtilityClassConstructor
- org.openrewrite.staticanalysis.NeedBraces
- org.openrewrite.staticanalysis.OperatorWrap
- org.openrewrite.staticanalysis.UnnecessaryParentheses
- org.openrewrite.staticanalysis.ReplaceThreadRunWithThreadStart
- org.openrewrite.staticanalysis.ChainStringBuilderAppendCalls
- org.openrewrite.staticanalysis.ReplaceStringBuilderWithString
- org.openrewrite.java.ShortenFullyQualifiedTypeReferences
- org.openrewrite.staticanalysis.MissingOverrideAnnotation
- org.openrewrite.java.OrderImports
---
# Copied from https://github.com/openrewrite/rewrite-static-analysis/blob/8c803a9c50b480841a4af031f60bac5ee443eb4e/src/main/resources/META-INF/rewrite/common-static-analysis.yml#L17-L93
type: specs.openrewrite.org/v1beta/recipe
name: org.apache.jmeter.staticanalysis.CommonStaticAnalysis
displayName: Common static analysis issues
description: Resolve common static analysis issues discovered through 3rd party tools.
recipeList:
# - org.openrewrite.staticanalysis.AddSerialVersionUidToSerializable
- org.openrewrite.staticanalysis.AtomicPrimitiveEqualsUsesGet
- org.openrewrite.staticanalysis.BigDecimalRoundingConstantsToEnums
- org.openrewrite.staticanalysis.BooleanChecksNotInverted
- org.openrewrite.staticanalysis.CaseInsensitiveComparisonsDoNotChangeCase
- org.openrewrite.staticanalysis.CatchClauseOnlyRethrows
- org.openrewrite.staticanalysis.ChainStringBuilderAppendCalls
- org.openrewrite.staticanalysis.CovariantEquals
- org.openrewrite.staticanalysis.DefaultComesLast
- org.openrewrite.staticanalysis.EmptyBlock
- org.openrewrite.staticanalysis.EqualsAvoidsNull
- org.openrewrite.staticanalysis.ExplicitInitialization
- org.openrewrite.staticanalysis.ExternalizableHasNoArgsConstructor
- org.openrewrite.staticanalysis.FinalizePrivateFields
# pgjdbc: see https://github.com/openrewrite/rewrite/issues/3668
# - org.openrewrite.staticanalysis.FallThrough
# pgjdbc: it might break backward compatibility
# - org.openrewrite.staticanalysis.FinalClass
- org.openrewrite.staticanalysis.FixStringFormatExpressions
- org.openrewrite.staticanalysis.ForLoopIncrementInUpdate
# - org.openrewrite.staticanalysis.HideUtilityClassConstructor
- org.openrewrite.staticanalysis.IndexOfChecksShouldUseAStartPosition
- org.openrewrite.staticanalysis.IndexOfReplaceableByContains
- org.openrewrite.staticanalysis.IndexOfShouldNotCompareGreaterThanZero
- org.openrewrite.staticanalysis.InlineVariable
- org.openrewrite.staticanalysis.IsEmptyCallOnCollections
- org.openrewrite.staticanalysis.LambdaBlockToExpression
# - org.openrewrite.staticanalysis.LowercasePackage
- org.openrewrite.staticanalysis.MethodNameCasing
- org.openrewrite.staticanalysis.MinimumSwitchCases
- org.openrewrite.staticanalysis.ModifierOrder
- org.openrewrite.staticanalysis.MultipleVariableDeclarations
- org.openrewrite.staticanalysis.NeedBraces
- org.openrewrite.staticanalysis.NestedEnumsAreNotStatic
- org.openrewrite.staticanalysis.NewStringBuilderBufferWithCharArgument
- org.openrewrite.staticanalysis.NoDoubleBraceInitialization
- org.openrewrite.staticanalysis.NoEmptyCollectionWithRawType
- org.openrewrite.staticanalysis.NoEqualityInForCondition
- org.openrewrite.staticanalysis.NoFinalizer
- org.openrewrite.staticanalysis.NoPrimitiveWrappersForToStringOrCompareTo
- org.openrewrite.staticanalysis.NoRedundantJumpStatements
- org.openrewrite.staticanalysis.NoToStringOnStringType
- org.openrewrite.staticanalysis.NoValueOfOnStringType
- org.openrewrite.staticanalysis.ObjectFinalizeCallsSuper
- org.openrewrite.staticanalysis.PrimitiveWrapperClassConstructorToValueOf
- org.openrewrite.staticanalysis.RedundantFileCreation
- org.openrewrite.staticanalysis.RemoveExtraSemicolons
# - org.openrewrite.staticanalysis.RemoveRedundantTypeCast
- org.openrewrite.java.RemoveUnusedImports
# - org.openrewrite.staticanalysis.RemoveUnusedLocalVariables
# - org.openrewrite.staticanalysis.RemoveUnusedPrivateMethods
- org.openrewrite.staticanalysis.RenameLocalVariablesToCamelCase
- org.openrewrite.staticanalysis.RenameMethodsNamedHashcodeEqualOrTostring
- org.openrewrite.staticanalysis.RenamePrivateFieldsToCamelCase
- org.openrewrite.staticanalysis.ReplaceLambdaWithMethodReference
- org.openrewrite.staticanalysis.ReplaceStringBuilderWithString
- org.openrewrite.staticanalysis.SimplifyBooleanExpression
- org.openrewrite.staticanalysis.SimplifyBooleanReturn
- org.openrewrite.staticanalysis.StaticMethodNotFinal
- org.openrewrite.staticanalysis.StringLiteralEquality
- org.openrewrite.staticanalysis.UnnecessaryCloseInTryWithResources
- org.openrewrite.staticanalysis.UnnecessaryExplicitTypeArguments
- org.openrewrite.staticanalysis.UnnecessaryParentheses
- org.openrewrite.staticanalysis.UnnecessaryPrimitiveAnnotations
- org.openrewrite.staticanalysis.UpperCaseLiteralSuffixes
# - org.openrewrite.staticanalysis.UnnecessaryThrows
# - org.openrewrite.staticanalysis.UseCollectionInterfaces
- org.openrewrite.staticanalysis.UseDiamondOperator
- org.openrewrite.staticanalysis.UseJavaStyleArrayDeclarations
# https://github.com/openrewrite/rewrite-static-analysis/issues/10
# - org.openrewrite.staticanalysis.UseLambdaForFunctionalInterface
# - org.openrewrite.staticanalysis.UseStringReplace
- org.openrewrite.staticanalysis.WhileInsteadOfFor
- org.openrewrite.staticanalysis.WriteOctalValuesAsDecimal

View File

@ -15,7 +15,7 @@
# limitations under the License.
#
org.gradle.jvmargs=-Xmx1500m -XX:MaxMetaspaceSize=768m
org.gradle.jvmargs=-Xmx2500m -XX:MaxMetaspaceSize=768m
org.gradle.parallel=true
# Build cache can be disabled with --no-build-cache option
org.gradle.caching=true

View File

@ -0,0 +1,16 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBFS2J+0BCADZI8RYk32YeO9gnEkY9RN+4dKb+H1AR4v+IGxmy0UYy+O8bo4m
YzkQHTlPpEPGe10/quKk1embDifEfNa9mwcSJl+XUPFlTrSA97SR31mdyK/Ua146
GKMW0F6v8aCgLUlm9BCJo/OmOat2jsc94SuKnPiRRywhmapte/8o9t7/0GghqLyj
X+Ifz4WSKyKZ8oe9mRFg1ZIA+z52a8QnfyI8WS8bpGHM/dXkBXZpzIDlrfKvoZYb
I2DcbOotJK/ZzStAZ81e4E/q2BEw96NUKJC5X+G8qahEFNJDcJz33UAxLiTFqWmw
iKLqy8oL8p9qPYlx0IAXoW/GxV7E0rBoA95pABEBAAG5AQ0EVLYn7QEIAMde+nVU
cozJy9dzLCUpn91SCoWld/wTaSckxTnVMcr4uNLlJI/2PFjMb9ya91grr1yuwqSG
3jE8P0Qdk9Bi6t6NkMIGUSJuzyIipsDDWaiCfjWxs7seFd9c+rgcH6r9CaUbNRfU
rPqEZSeL+RDwIIz1gQkXmosF94DjZHP9abZYObH1/Or64CSRD8Ocf6kTRndwJOZk
RdDtUX5NPFSiU17E/DoEkyryuXMR+Ci0b/hjQ4JnriGeyy6c0StWQUW18SEYPV0j
3VyRRUcOLhJajEu8KU4Xaaxgb/2X7o/BosjjQ8BPPUdTz2wRluU/1tKUQ8D+O8QH
7dCR3lJt76kKWbsAEQEAAQ==
=ZM2y
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
1f47744c9b6e14f2049c2857f1f111af65925306

View File

@ -0,0 +1 @@
2655176f748fd83725b4805ff2a01147d830c125

View File

@ -0,0 +1 @@
56b505dc8a29c69138a430b9429c8816dea04cdb

View File

@ -0,0 +1,16 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBFf0S68BCACovMXnHqnBYRmC+rsIIPOoT1vSusHWu56beDBG7t/og/nziZq1
mcZhX4oFG/IKnY3af20Flcv0X0gNodH9fOErvQ7hZDvHBgB9HVpeKiMx7OQqRWke
+vV/vcUFkt0ICyMzDvEVod7asjAakKZHKiVpEb0mM8Zvn3MPUzFDveK+tHWdbuWo
WFmmNzmRpkK6hbMlXlyeTYs5jvYv9P5FHm3xYTcHJxrPYTF/uZTJu8Tqol8K1ImX
kH11pnhgTzI6l0oIm0JmH+40LGNYrsczW0JdxwQzfQbsQM3LR9kCAMr0LMEya70l
ozvY4LsX8Y7irBqlF1519pakI6Ss9Cz6sSLpABEBAAG5AQ0EV/RLrwEIAMHMulFu
vwuB6Eq7jocJ83udZu1snzxbtR5QttTwL/Ck6ZwD/8dmFY1Chi8paJJsHzSZpo6N
UiaVRqBgvR/umMMHNTdlUftKdK9pbG6/hPeSw2856C+cFHuJKDAfbaAIgMb2MIMA
WL2iTle9zc7IBM9ly0rj9L7hrW46YxaBKZD4XGsFgpv/2/Tnkq2pZM6ou/kDyAAU
28A5kbazSaU25/a8jPp5dFW1qCZmNNJN4d2TvvXb6pxz79B54adgEQcGOck17Po9
fknD/RceX5VbFpXIPuaU3GdL0lee7gDOWGbyTbgnlx5JTzemGiDqay9o3fMpIRjz
7meVf41AFEedxv0AEQEAAQ==
=HiTl
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1,15 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBGPF4agBEADsWnQn3m/dMw1Q6FLALQCEucRkRLw4wcmtzXuuYb2M17aHvEb5
+OnXDdgQ2QcnnjK4S3zQp/Jt4ZQnnLORqx919+c+1gT24U06VxeGPW/TLRn/hnKA
ZM7bwGCz7em/GQ7JaIXPn3aqGrCiy8j8N5jAQ4ePP5ESQLeWisQFlbKMFVU09B7t
0IPG/LQ8xJs/SveQw8sGrz9zqyYE58EauyIKfiI91Ruk2jMcb/m+SRL9Bhen3Q12
g6kFrHurLtEWzy1rwELt9g9OILv0FokPa2m0goQRHx4nFY0kIpJ/r9kDUg/tlg4H
OxP+5XTJxEXGW2gb9zpmDpdR8aUgi67/Kdm8+norzpTTMAuKCgclCv3bJz2D8Jnl
IgEXmSoznn1EnFkm0Qsr8JwkaPC6LkGcI7YqvEdCXtRXduot+9GgWytp/IxrlJ4X
vFEhOmChdVdn5lT1T0ka6NxEJcmf5mfgyz9jRUVHINNJxQKP1Gh7LyMFeWw6V/X7
RAeU/th1pL2rAeBqn3gnK+CIR82/AVDJJa86BAHiQBYilgs+bGYriXYd0qmIFvYO
sSfC87Dbl3kzwcAGWB4d6tezLxrzscfbzWFIa9woy31/OcqK+uglSKbTFsIklhM8
Rr2B0tQS1iNzq5gyWGKnh8FsqcAiGvDpwhF7irGhU7fNRVVSuamVDnV0BQARAQAB
=1wAs
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
48b086a7d843cfa258e83286928fbf39003c0425

View File

@ -0,0 +1 @@
2655176f748fd83725b4805ff2a01147d830c125

View File

@ -0,0 +1 @@
e113159331a1f87bfc2a93d0960d2e8635a91268

View File

@ -0,0 +1 @@
bd3b8aab16ea001cda79d4773e8a7f8a3597e7fb

View File

@ -0,0 +1 @@
7119b89feb81209430e65c62c2ad9c8a7d4e988a

View File

@ -0,0 +1 @@
cde577234159e222bc56e50f9c61220417aaa02e

View File

@ -0,0 +1,26 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBGQYtMQBEACmLu7LRrKxzEnLmRI/fWXuO3lcr2Hazd7DVmMSqH5sf+D6taoL
uNRchspbHp804GOltu7lR6rNI5htQOpwVuiF6hu8HORujpv++N/yGdW3LGoT3R9a
wNkJIudgOCxSZnNON+gKe4pqdk1R3WKWQzXe5o7PBn8zJen5uYP9MBN66lQxXw7T
XsDDXjGRHJth7lOzJi/JStcO3Nc/n8PYz6b+t7LW7vZYshogRq6yc4d0Uktr3ZJw
IgiN6vT4I2nHU48O+nqvKevfspNZdyWyrUCkAC9heANiXNEnr34j3EjTpJy4Cfmg
By1QxFEaJN7HPf6y4OtTd3AThepK/8o69nw2LIjK6mvWa2ERXSNAVWbSKPlKf74e
/x6bBDDqevDx9NXApTLrHRzBKDgQ2I0r68sX8RZTgbzx12I5CYTpDo1JRprVtn+T
dfO50o1pxwvlDBuWCPqHERIzF9QhNXUDy7uh6J2s9qho+p6LKn01cOXoOrlMg6ZK
syd5Ffo/kqiDv77IMAdaXmYmZelX2y3I0tfM3ccH90u5cDKEhRdiFiW48JPnhcz9
QKUvGtT8hywsjkU7MpJf56uVQT1ApKmdL9rOgnjGnGeB9HNxEhXl1z9Sqjc0QAx9
mq1TZ9K454lk+AqwAkUppoMez3tmJWULqDFqZkLuh/uAjycHhLSHmOWq1QARAQAB
uQINBGQYtMQBEADaTQ8FyQYGKEFydGosLSOPet+Z4VaWWrjF4TOElczfhJnDhGIl
iDU8c2hHFbovdWfW5fb2G+mgckyXnUFtO0FhIDpho2Mmz1sR4ZY/1dXJdaeSy2kb
OxVTcVVJ3iIefvV7P7k6FGz36ROTthLN+Y0O3ZS9QlXDjtpOcANszgS3zaC2y6T6
YDjubU8lMfHAad/VNgCtuG0IcErI23s2hNH5IpzndyuZoYff31UTzMW6KufbQC4c
Ak7u3SQYVCq0HP7o4MiC+Tt43tLLE4WZUPpHU2REu96FZTot9/6WROTm7SzSNzS0
q764jKe3Q1Y3AY01t6kpQHv0mE1bQ99e6yD/Gm1J3Fet+0z6Q6yB1Evt0Omac6yy
EJ1eePB4whGmeyoC5oz94jbTkGkhXS8Cxwl+M7HetH82ShC1XPl6dz67WnUndddX
LQnOr1PfXI4k81qUyPuojvMLwKhX9lWhAJImQp2e3PqAa3pZOcjdw7pE77ZvKF2a
gwUJ0nEenzfM9oyj2/V5NGCI845Lk1K/319XmxaYghEJIaNBAVDrrkoVdY6tD4le
5RKdjfTvnndYsZYh/rJZn+fp5GZAk1hHQsj/yiS4kQ3h/Lt6Gztv5Nsh7U7M1mat
SLZtB/pfyHZxHmS4khcR0HGyHUSZyPBbz1Xno0hqU4xWOlndax+peHjnHQARAQAB
=IBhn
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
e113159331a1f87bfc2a93d0960d2e8635a91268

View File

@ -0,0 +1,26 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFqz2mMBEADf9rwaUU4Up4hEHRt7JnhIClBNYqQr8Oc3QLvtEmsMv6UWHQ/h
l70MhvCrAZnxnDmcSEE5/A5VeZSDBm4qM+jH8x+B9zIVMoWS2c3IJeE0Q0bt6MO+
j6TQrrXmetyCvzYMz/Dbr6f3alEvh89ImkSZ4XdEByFcoXTdpQ7WUzYNw643F3W+
pXg2eMm0DVN6Sqagbeqt1qZQ1S/3RwtSIgfGt0T88eBYMe8fhrLhLvsakERrPBKj
01uzeBJ5BuUNZ8OrI23RaF7upDVkoxlZW6dz9u2W0YiKozo0IHP5JdllSAtg4Bbn
sSfNdia0TbTT5Pwoz6ncY5ivUnCeHP2nZ02IjTAwNs2mni2KLRKop/SRqKG0jqRT
wFDS4XeocvBqpCAHR/Gf1LmR2j+jGGkohnFAqS9ds7yZISnp+5VnEvjs+vGwMh2U
ybwGpFJTFE70ntg7t5S48P+IjuUDGWoEE1vZsMmm4ytAHPxRBeERvMhPL7PLLYPY
pejtRIsc6qSCBVi9DHneXhP1bh9Osjg9YOckShNQTsZGo2IHxjC1dqXXWn0RNYLa
oxqz6/RY1uA809N7/kwG1xBgaRMJl/HNfBVAFf3Tx0ILI7cVGvKrHpDiUfSxLpY4
M3EWBRlJ925bkFhEIQ2XHhVh6fhy7W8oB47dnYpTlVyEi6iPh+clUKuZ0wARAQAB
uQINBFqz2mMBEACt5yWpYhiY2Tk4NXOVBGBe/r8vwwfKiilH7RcUVi5t7JP9n4IY
8vzp6sENykHtsTITRu32QOj7KAu1xo6hSdJ9aUUuL0/xiWF6eiISqa8isj54XuKA
4xgDTJb6gS7EFAZgU1PWVAihX75cEWMmNfPLulfqOGaxKm9kgdeo1BGDxp5aFm31
EptDrCl2h3VgWDaBOm+Zo2xQyjMEpsBmrZTLtv+VEjDGb6J93sgsTFMd6eAhd+Lu
yq62Ap/SmavBbYyhUIv+ay/2Kv+8h8lLc8KJSt2Ox/hDD8NFShEw6Q5VDU6+fsjy
CauFeCCuDco9hSSFx9d5dNod51dXKlUz9Umwd5NhdLa/OYW5rA3ohsoP/4HbSPzw
2DBacf+No4jHxnk58SU4XGyvDtWSuiTVyDrZGiFEYpPjEXUuwjidiSCa3jb3gfl0
0lJjg5wKf47TWgVh94AgHjkZGutv6votGc1SoGS0QNJjRFeTjpr1nEwOihz0AH3a
FTkiNBd78rsMctURswvfIjHwGijJMrSKzgKysgUTuuyKhvhEH6C739YweArhJkNo
HP4Z91FEDrn5PCtUHY7deGHiARLPcgnN74wq45iGNYmK7Qt7sbWcJQzJqtMzHI9c
MyM+h9nm7lOflBVvJo4kTYkIgqwg6rV/BLCv6/ONqmmMmEEh7B5c4GA2IQARAQAB
=/Car
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
1f47744c9b6e14f2049c2857f1f111af65925306

View File

@ -0,0 +1 @@
ed09733fa05dedf15100abeb32bbf14af07ca77b

View File

@ -0,0 +1,26 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFPaQqUBEACzwC+QX+uZlPAmU3ds3+HMgw12yoEb4Wahc3hqL1nSekUZ4oN1
EdKtzIrTORcB5eH987FfbgM4wPeott91ZTNuxr0X6ulHH/YzkLnytMjlipEuoxZ1
FwXjTBN187Xc6Tbewco+Tm9BpPNVO7eNlmJih4TRXPmb7Nd3WAb9UYOO/L+iHluo
6SmZ9fIw3AReNdfVjIOV2w7fTQJdBt+UpN39hrHU1o2Ok/H5EsS7gf170HQWgpHd
0GgXVF49BKTVVu/D+X3+C54DHfMJUwsxJ+KNYuYIsWV8nUf+Prayji3IJLeFBegL
VO0ZzoQs+u/PyOQIOTz2odvUIwde0rZCveILi1W4wj9ijhL0eT0n+tepE85vlYr+
ZHXrlEelJHq4LhC4a7JSdhJ0UreJM3oTIS4svmR6TuwUjAiO1ewYwfjWB5EWoz/7
qQ2fj5gjgP2A69DXtJ4dhj0lrUWpCDy8lgdKAgIpxepE03o7SaZhLRslwCQWBRW9
SdSEByx2KwZMcu7cmXSgavc+AiSDD5KIZQJdHwEP7r4OewyRpCa/wplcPAimVUs4
KTt7bXtBnw4jiGiLmTiHwZqMmCmSEUOzivG+7wuXsBA0ucivmert1IWamSdT3NRt
C6IdH7KR8tZXzmkIl6ARH0WGz109ZrqhU1vCG1tLWhmaqW6VuOr4J7lA0wARAQAB
uQINBFPaQqUBEAC0uU0KPaS4FjwYB0fvD2bJ7zLg4PGhlAYkGGOIWMSys4pNd0Ql
TIdKqlZ6hmCEiPQOwLAGN+B4Fpp9dU7MhPOTfEWY/ccYcOiebktJvtY5C0KbC3JX
bVvYKZXSszVcVIvlEMTXt2WtRTov2cff8uWE7vadXSNQozBH3pGBnBlkzTiYJf8y
h9BNqgQ4evJG+nRfTPOPHtPKRCtDaC8CwF5rnyD9CBDuFLxd20i9i7T3tsWkfOV1
5FDutdtZU97S43cI5d0apQX5wk4XzM3cEmlYSvW3EffK5K0gi+Vyka8JxpR9bwA0
RzuCwwbP4HloAhxVB/R3Zcsy4wweK2r6tFOdA12FigOGbO5+s3Us6zp1q0GL8N83
D0D7Y8HMMJmLoPhK2Ddg5T6zrti+2z0vO8d6elmJluASzbMYYk4NMxuJTp+gw0i8
iTp9k28/FNZbHsVReoHOeigybawoAOZX3x+b52ehcoIWdX7IiVyTFYsPb5hPPmrK
185KDwAnYxwSaoamxhj7MybCNteUFCjVQtbD2UHl7q5nzEwUbJIO2ibwOCTBw7FO
zmdCVQ4ex85y/agKnzaqxBg3fnpuRKQmflG24oPhwu64gUW2GZskfCQLmLPX0Lqq
06FIcS9qgl2o7LaLDLTdS853E4696B9tMXUOgEtvIftZKdVKE/9RqQ6PdwARAQAB
=Dpj/
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1,16 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBFKQ78QBCAC7JYRWDFIDUVKg3upqCY4TtA9wO88x9Madd+2SsZX6dkmMXgDD
MCAOP5zqFgX0ZoPh/sOnkEx9I8owfwfITN2H85tOdJ9rVvuWzgZXQpDkWExDG25L
VNVzcTlOC3ZrJevjo62WNL4QPKEnrFPvXa9G+fQabixAPFqBwTjVP5WNABr49tol
nwNIKNtiqXHXES9J3G02SIjIS8OgbzW0WtSwP8qi8EUzggnCTRCh+lt/Zz1XxEx/
Zlk07uurOebvJ2wKJU2jhzYKMI48h4AI7qowjU7+IrGmEmSQ/UIyAnPFCcmf4Xyi
Sa795ddZd1KKy5Zxl7SZk+2s2RXzYP3Yyty5ABEBAAG5AQ0EUpDvxAEIAKYmziBF
eMz5y9+sl5nOhCZ52H6tbCbmPT5pDS8ct0hFuAocFaOlq0fUyPPtH3S3vgCaNsg+
yrZgzUSdvwWKWBiJw/vg+Yw8cluNnNScRzaZOlW29rBnKZAvZVuMoQ3WoR/8kF26
BgSaJ1hRduAQLQMmjONWuQSGsU/AyA0K1TQsHNpAuVJIS2PdOuAnf67YDx9WOn8u
+Bk302Z+7ppy88s95/IyG8Mpv3cqNaaGyfHRwMPIEZxSOKwnh5yhvgp2Il0BTfwW
WZeK8Ls/uBask2FllcQLgQMxkWFRODUaTK9cjSkmXuu+O/9kLnexUvuCdFUdxHqw
lz3uqx1u7XBxnBkAEQEAAQ==
=sePN
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
7a1d848e7c2af85eeba69c99e7bf252cf360097e

View File

@ -0,0 +1,16 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBFwrcpEBCADYHRnfzETbqrTG345y82fkw/qxr0oryHuCrb1iqYCk77w32PQz
jspoJBRSCrxTZT9BQJw9Y9kni3ZhlMxJJYT+BdcRPUkxgSw6N0r3CH/mna1XYL39
hvlhyfh+s9brneYLbOIxOrHAsT3ASgYcDDuNKrgYgGrUB7VifhE7DW6oFnDrYmQI
CH2ixTeDfuzdcZ66w3+z8eQZLbdDJ9aNY8syvKkvyGsmUhkwSHBJDwW34+nV7MnP
hDZcfm/yZL/AZ1q5D8SobBJBDnxQSOcGPNgCnPM4UiwrmvTuneEN1vNPM4xWq17B
/+KurSjDbIndZCnzq0l1xsurq8qeK8tsNNrJABEBAAG5AQ0EXCtykQEIAK64QjtN
b11UNUk9GAlhkcUPCBSrlnQM4A3Za3sHOT1owfYov6DQxgppDuqTJ10NdluD7M2U
MuIYw6nuoILcteXFQNlhGsz8Xjze5EPpg18t9c6ZoFUMPVUtDyjyZuKM1yHyo1w8
Z9zRRmSGgHCWH83+VDUjF1D2CZ4Sfii6Ji5GnGxH68Dq4ZucWArPYGgr3hhz73lx
SAD8KVyXeMD46hD+lhqlg5lbQ9k+mHwpKUgft35jAuewwhPbY6wb1P/oQOgIFJ7/
0GsZwJ5zUu+lp6l7N17wLDUCQisz6+MJvyY9wDtiHzI+zBLS2ecacfpOT4GE9K+H
pmS6gk7fAsRC/8UAEQEAAQ==
=/SFy
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
1d339b6a68ae2e8daeda65d5276962ca56e73c81

View File

@ -0,0 +1,7 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mI0EVdDLQQEEAJMtYCaTA56YsP5RzQzPvqVTaR2nZ27qRk36blHB9WmXK+NHpGeH
PHgq59mLPVueo2/M5k/fFrCe36jHePP31gYpFtueeYDfsofHwod0WhsHyC7JfG8d
jEnSczTCmOHRZ3ed9ef6SeWUozYCQAX/tAbpoCthe0lTDYhFhkzVCe/FABEBAAE=
=45ZY
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
120d6f34e627ed3a772ebbfe55c7e5e701832382

View File

@ -0,0 +1,26 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFyrDesBEADSY9ho1u1DQ8MY+jc4xApFAagCd8VB+YT96A8FzvPLuj7f8M4T
JNjd/Te7kR47SW5KoROiucoVw/YrUnyaHw5Ph+vF1msTlxD3OKU2PiVHI5JJgg/1
WUioL4wASue+r2QCOc73a2s3eVfSFjozNE7I/gXlbceuN5+7O8a2eEBDCErH6TPn
yD4ShnnRPtMfBTYKMCV+sclIsjO4buxyCfqySyxHS4vGXxgGxZVvc2HrSbL+JFo0
PMcjPSaK6u+w2KBo06HS7TngrRkxHmqzuoo4xc8HGaSA9XKyQPOrcerIsdns9EpD
ahk556qOtRQay77tDwF5bJZvA37DJI3QfVVXTZBFpPhFHmP5Ji/6OTsodVhpTQr1
mycP+zAyMOzD+gvnJO302PFWCZblMXbmVMToefNIXAAobTOaG3QwDsvftwQX9c0V
ZTDSoZJXTsYdX/2AOWOU1RMzE+qbzgm/GLZZ9ytLHGdodL4tmo3mitPsm4FLwyUH
TjcP/SsZZQk2mZyiR7/vl+BvSTqnHTXj+10p1+MIOPiUAwaa9JVglV4odkJHZwwI
7yEKNqyDeMRBbxtZn79l+qmzsMi+51MRdgPiBRktPdwC6w+bkxfSKCSWdD59fbNg
91jFktNtUMK3L2NLX6YRuQ6+VRKGqEOI4l8hEDKM7/eS8Y5Dxe5RmesoeQARAQAB
uQINBFyrDesBEACqVQoHqtE2l/1crv6Ym49ZHT+wtmtfS4D/ZkthHz3Bc0Zne4+B
DbXtdG1WhUvO+S7CRfeczXxDMmMsUeN0/hzcCG03QguFHQyQL9IIccAZRij6TR2I
aF/N43fZgfL1ai/TaMgXDv7LTbe44MK3w4jqfrd31Ee+laN+gluG+o+LJBkYfpzC
MlkXp1Xa5kuFFoaGn+Dyy0MTs37jnbgblyraGogkciERzlOA+3hMnolxTfx5v/Th
Mq1tngshYw/PkLACejKCpJvi03tJF3Q9d5q81AqSyqthSnfIITfOJ40U3J9pDM8Z
WJXkkXunlQIUcdNvQAzjegMg1KB8TdVuNcFW7ZrtPAOsSxEBk+Ty/xhXBLxoeHXj
WwVlbeSAumCZgVqkkvuxc+0gIocqUKjC/VqTyoENX1z8/dbkiGRmvebUJaYxoiPE
x8h9O30zqKh42ovM5xiEHajZ0kJBLJgg225VCdJ+4ce42LkZ0x67EcDZYdQ97iRo
rOPqBK11ReeexFsrkfcJoywBnlxIuPKqJ1T70JoqDX9TJHAM2n07kbxjU8E/pqGE
jezk+oQpJqGTXibFRizvZbKDeBPmJXVCUHGphs0ZXyzgk+WGEqBuqR7K3dZKykCm
AZui12ZyHxSA/PKzaUKMAQmXrg4f3LxmI8GDl4EmuSykK6wAO0I+/X08pwARAQAB
=BwIl
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
7119b89feb81209430e65c62c2ad9c8a7d4e988a

View File

@ -0,0 +1 @@
f36ca0c4b500f0cdde0c5aa1913f763cd0f9cfd8

View File

@ -0,0 +1 @@
1d339b6a68ae2e8daeda65d5276962ca56e73c81

View File

@ -0,0 +1 @@
f36ca0c4b500f0cdde0c5aa1913f763cd0f9cfd8

View File

@ -0,0 +1,26 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBGA+eiIBEADDcMhLJttJzEdu0drh/9d3wtVvdCm6cfDk9dVFxk4dt5MLe0f+
Bv8+WKMmfbsmZzj4/f9nwYMXk3yx41iiN41uuc+YTT8lHwsOdmlPClBAQmtg+VT+
xTIXqGKQmsElNjKSnGMzC4wI126cZrlv9uuy1NkDfjv1UM5hCVW/e+mysfgDbF9G
cEJajBJIQc4Ps99YruNzbZr+kRis76A9CGtBcxVDniNcNNO7ch7rQ13Df87gQl0x
WJrech4mJRhfprqkeM9RD6khTpBAXSXuPOrM6x0hIWEILq0JllYQ00G1AznXgogP
fbsqbnN1wiztwXRVOupSOsH01CN8ANS5e+ZIWrc49QxpRHLue+r9ijDVAWQlF3N7
2AhUcK1//BApF095z2g1d9W/+BVbwn0MZnLjjNHZqU0myJxSSBfSS3HsKd+xWurk
Lp5yBEUaxgKBg90f8ikOl2DQxNt1EPucI51DwsfPbMXkAEEuBTOaZssIAI8DMxNX
32VmM5O9ZPR8HuMDoTgwYBCuemp0Zt5JnWyhWWBvpWzz+4qh3ssAysjO7Zmpkh6G
2vmG4WNzY0ZsttpvKLC/Ry1c8oKpw5vCM7+EYpH/lj7i9200hLQ+82D2ndxNPbBJ
RNUBzBmiyAPcBQ8IZZjOpAfBC4UqaCHDfgz9hPlhEHZAEFHLBHEGd9eXwQARAQAB
uQINBGA+eiIBEACXWHVGrQDyqTqboO3vXxCyM7NJgCEeN5Cp7xK+SGBPz/z2qfol
IR/lbiFqL/aaGVaSsCKh2yz8kGuPNVsGLyfvO0pWRb8reEG9eXTBVJxZmOQ4Ulhm
oBKLvEniOzPCqEPWGxSv2FBhXKeJyViLMD+go/6+jXfJmqBPFFALAN3CWiIZDrCj
FqiduWXMapSWptVDtWsq2Q+LD97U0+ESWzvt7BVs/NWzTbUWvXHYvipZ2ZFZstr+
ym1G4IsjYB2iy46gjePYh2aG6YSsG9tGe0FMVf1/dJaGz3U0ZMD6qicm5FYDNaXq
217pXOd+gvvpi3SxdaOiSMfYPuhoAv5y66+x+zqWNsNVPeRZydtWhbvhpNERSvCx
r9Agh+4WC0XPQEGrC+Hyau8rYcwMndAwR/Pw4wNKJuB7IqWnk8y/1m3Br2vbc+hi
uhFVOx+ZkBJrlUcFLVT2D/3fonDrxPWmOJvzgqlSeZaFMFNe5/UoXBAbZb/1E1pj
6uWrun11NOrZdsD4Eic6PzERdWYoWgd+7fFqeR3CQDMyOY1XvetOgPTCzwAYjLzR
UXTENayf/mhXtIbiqYLrx8ljz3HN5XUcFo9Q5Zep1e3IJNrC34dea6azh/N8cgPa
4vEKkHI3g+udt8n08WXGMMgrdvi3W/5Sx2UuKjJn/Iu0s13e+C9/odyLhwARAQAB
=X8g8
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
56b505dc8a29c69138a430b9429c8816dea04cdb

View File

@ -0,0 +1,26 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBGB980QBEADLBOfY981RbUf7zI9AoXcxGignXkYbeSvxIMML9vAbnhmuHwa6
h+81ZTY2XK7Rz211y129YidPykkiLX9mY+OWvJsj7dTyVTcIm6MU5ETDvovfmKWg
5sJRrANAnkZ73UVJIKTQC9HonBIpiPLmDEBfReHkNsXtYqS4fyZO5tkjy9ejaw2p
5qpOS9WixIvZT43OfzH+8O4ecmDrOZ20azogcWqLCQ/ZDbfnyHFH+BvA8bn4bS6y
304655N6cxDbShHrLWP6erbGozmLu/hVabCMSJgGRRb8NcUzJQ5rwh27SvKyMGKE
8u1ek57d2wv2pI+sACBMzYlrP1S9MTcpUsQ4YvDQi9Ic1QDw7f2KkEsEnxs7h17h
AhbBwEvNWqpFkKjI4ApYsM+/fPo0/lsT0lskjKrCnoEL9+sLKDcp85cR1dPC5ELf
b2bhgjqccIk2gASrjmTiryF7gUiMTgZVU5PF9f0+p1pGqC4GIjJOf/JGhhGEyzVt
BNvJWUgImqWbSFOKWfvnmdjZyULAVouxrrxF1vPN2U7KFurmSQV6tq/1Uf/qccR9
/uhEI30ypv4OrVi+8WoVsEamag/AlnRLFCEjdfB0oUy7V/lPqMxRoxmhiTX+cCjM
QkFfcspJt830vwct0pi4rtYt9pk1Roh9tOKh2UKRDGL5DE3rZbJYs+6TAQARAQAB
uQINBGB980QBEADfm6alrriLjrDLwBlQDIayE/SCyieZlfCsdcM2tcnFF8dznHMp
Dimke7NmZ7YYpuSi4im6920D3omARVBHE+JKAcIchCRPRTH0ZvbVx7bzdiPztc/6
su9YJ6NbJS81Mk5c2pAdw6e0qd6Zw98aVyjfcd8Dy42uuBfQrHSuYYpXy8kn+WZ7
zou7d0CVskvel8GhqPshY4Vwm8aBDXrydEIoEYhlhnzQTUmVylaHLQAnKSJmkWCK
o7UUkH1B2vfTZXAIVOt1q+5bkR82AT95Jj5JzKfoneoeXeIwIIbj+j7y1FM44e3V
DhjY7TsN4tyOqzMRZ5/6GcVpJ9Zns35o+pGrVa02CUQFEdZFrH1fF84MglydRgHJ
QsFuqOUt5cQgRpXMAhu/aex+Y1YBjyWPqRFtIqJMqejLRZ2SGAxQWOXOrW8nJQ0+
2leLsFhgbOvtYRI9NBm2kPZomHnrHmmG5EaBwjOu0xXPMEooIICUfCPlqmonXJNI
Pm2pZXp7geJ9zV7b83iWkJK4YqIs4UM78T1kb2EUHguAR+eS7kc8Z0wKxn0n/1e7
lT5/hlp7ZR7wn/qjr3SAR6RjfIevakD1tK1zj4wJgPWmTnraeyyzrOCq7z4tNGgG
ZSvSrKWckb4h35iSEs6mcAEVRrzB6a++HBGlTCOQQ/is/0uUFr4yP5R7oQARAQAB
=HqzY
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1 @@
ed09733fa05dedf15100abeb32bbf14af07ca77b

Some files were not shown because too many files have changed in this diff Show More