Merge commit '4b8af4810daf8d9998f9101ef123f4e91c58b1c3' into aosp/master
Bug: 281035030
Test: ./gradlew
Change-Id: Ic8042ed88c02f1a072562925eceacd4ed9fa2359
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 75ecf04..3c5e4aa 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -4,6 +4,12 @@
<bytecodeTargetLevel target="1.8">
<module name="com.android.metalava.main" target="1.8" />
<module name="com.android.metalava.test" target="1.8" />
+ <module name="metalava" target="11" />
+ <module name="metalava.buildSrc" target="11" />
+ <module name="metalava.buildSrc.main" target="11" />
+ <module name="metalava.buildSrc.test" target="11" />
+ <module name="metalava.main" target="11" />
+ <module name="metalava.test" target="11" />
</bytecodeTargetLevel>
</component>
</project>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index b3becf1..d922a68 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -44,7 +44,7 @@
</value>
</option>
</component>
- <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11 (3)" project-jdk-type="JavaSDK">
+ <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="11 (3)" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/classes" />
</component>
</project>
\ No newline at end of file
diff --git a/androidx-studio-integration.sh b/androidx-studio-integration.sh
index 68f47ec..8ca488e 100755
--- a/androidx-studio-integration.sh
+++ b/androidx-studio-integration.sh
@@ -19,7 +19,7 @@
export LINT_VERSION=`grep -oP "(?<=baseVersion = ).*" tools/buildSrc/base/version.properties`
export LINT_REPO="$(pwd)/out/repo"
-tools/gradlew -p tools/metalava \
+JAVA_HOME="$(pwd)/prebuilts/jdk/jdk11/linux-x86/" tools/gradlew -p tools/metalava \
--no-daemon \
--stacktrace \
--dependency-verification=off \
diff --git a/build.gradle.kts b/build.gradle.kts
index 5f74fa7..55684e4 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -15,7 +15,8 @@
"test",
CREATE_ARCHIVE_TASK,
CREATE_BUILD_INFO_TASK,
- "ktlint"
+ "ktlint",
+ "lint"
)
repositories {
@@ -32,6 +33,7 @@
plugins {
alias(libs.plugins.kotlinJvm)
+ id("com.android.lint") version "7.4.0-alpha05"
id("application")
id("java")
id("maven-publish")
@@ -46,16 +48,13 @@
}
java {
- sourceCompatibility = JavaVersion.VERSION_1_8
- targetCompatibility = JavaVersion.VERSION_1_8
+ sourceCompatibility = JavaVersion.VERSION_11
+ targetCompatibility = JavaVersion.VERSION_11
}
tasks.withType(KotlinCompile::class.java) {
- sourceCompatibility = "1.8"
- targetCompatibility = "1.8"
-
kotlinOptions {
- jvmTarget = "1.8"
+ jvmTarget = "11"
apiVersion = "1.6"
languageVersion = "1.6"
allWarningsAsErrors = true
@@ -67,7 +66,7 @@
logger.warn("Building using custom $customLintVersion version of Android Lint")
customLintVersion
} else {
- "30.3.0-alpha08"
+ "30.4.0-alpha08"
}
dependencies {
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 00069ce..cb951ba 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -1,5 +1,5 @@
[versions]
-kotlin = "1.6.20"
+kotlin = "1.7.0"
[libraries]
kotlinStdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" }
diff --git a/gradle/verification-keyring.keys b/gradle/verification-keyring.keys
index a674be6..aeb4da6 100644
--- a/gradle/verification-keyring.keys
+++ b/gradle/verification-keyring.keys
@@ -5052,13 +5052,15 @@
bMFjyklLBAm1WETBiqR+k5uwXmJ8
=RGVX
-----END PGP PUBLIC KEY BLOCK-----
-pub 696b6199a2a9d8c29ce78cc0d041cad2e452550f
-sub 1ce2b4b069f2056affb34cac5199f3dae89c332d
------BEGIN PGP PUBLIC KEY BLOCK-----
-Comment: Hostname:
-Version: Hockeypuck ~unreleased
-xsDNBGCtdhoBDADdopjDt4eUNEqLJSw1ZICSR0oq09SOVtJSaSYdF8UiXjBfL1Ds
+pub D041CAD2E452550F
+uid Deanna <deannagarcia@google.com>
+
+sub 5199F3DAE89C332D
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGNBGCtdhoBDADdopjDt4eUNEqLJSw1ZICSR0oq09SOVtJSaSYdF8UiXjBfL1Ds
fhTDqSv5pT2a2gLj0OU3tFhWHvINLaKKCjQnHVcFXi2LTxt+XBOjRYkFjHVisbaZ
PZ6HnTMStPrvs+hQ168vU3VfYOsOLN22j53I/Ba+FA7E0G0bqkratuT5L7BTR1mC
fqDaeisWSCllfe6EEysaFF+/1RcRy+Yt+8ZWV0FZEF7UwQvqKHcYmlkqPIn3v/8y
@@ -5066,8 +5068,8 @@
XbQPaESxkki7yL5JTfH/+UzdklMe+Dga273L/cgzfjV3zJJ9vR94W5ABAbGYh4ZW
aKvNnT1m4vTbEMfo4r3NF2zc+K9Ly/JNaHqkR5M4SVElvN2lsC5KNUiRvExhg+h0
mKyx61mu3gUIrC1UOmqhtx7RzQQf7ESMdzmNHY0P93lR0Ic10fyli0wfl7A6q7+q
-zV2a1V2k9Yg6B9sAEQEAAc0gRGVhbm5hIDxkZWFubmFnYXJjaWFAZ29vZ2xlLmNv
-bT7CwRQEEwEKAD4WIQRpa2GZoqnYwpznjMDQQcrS5FJVDwUCYK12GgIbAwUJA8Jn
+zV2a1V2k9Yg6B9sAEQEAAbQgRGVhbm5hIDxkZWFubmFnYXJjaWFAZ29vZ2xlLmNv
+bT6JAdQEEwEKAD4WIQRpa2GZoqnYwpznjMDQQcrS5FJVDwUCYK12GgIbAwUJA8Jn
AAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRDQQcrS5FJVD51GC/4oTue5F8jx
oeMyDzoZdeiEnEFvrTU80/9y1CrlSIX0HdD5m9nENQOfDjSv9RrHC16WfJyQtKYs
ADujaZGf2Da4zl2XZ29zeowQK7nzlh2y2bWz7eb9i+nzRApvM07AvSe1ILgFXy1S
@@ -5076,7 +5078,7 @@
e3V1se0bvRdx/FlpF7GTZlBcCpmOxTAUon8O8rpgktdoEkz4hknl2cVod4Preax8
b3jMyf9GFMdl+b0xU3ho3IyfiMMtez02lNTjDJA43R5hLGLgZPV6crHeukbMmQcm
l4ckUkABFBMuwxn+TT5CEaDG4UoNmOS3n8vDM31G+FcJYJHeNAYNXj5ZW4T38rX3
-47Hz+R9ZAiHrypAPZXGnAizzEQ+bdAqge3Ye6KA/krv2A9rP272UiBTOwM0EYK12
+47Hz+R9ZAiHrypAPZXGnAizzEQ+bdAqge3Ye6KA/krv2A9rP272UiBS5AY0EYK12
GgEMAMgP3//QeBsTS3IrfSp3m44el96X6BWona2yo4DvVyuwqfULZE+Nhj7I+kEZ
LrA29AOySOD/6quJ4MIJZfq/Do920Di8/10WQ00OdCM1wH7bMz2UvcSqsr0iOgQt
ycuUf7JOHSTME9vqk+C3Lhn0r59AVaRdXEe6zBgNZyzZJeCr5F8wRhglPlwvhOGs
@@ -5085,7 +5087,7 @@
uXMx0zX3jfNNHAqUjVhPYZhnifMkmGJgLeMIVqr5Q/tx8pzyYiiOcqQ1zDg8ubJD
GRue1JjlUGdw19OvhFDs+lydukt8Mmhb0gPkBLi2syZHgYHtEooXPLwEsJ+SynZC
FhZiWj8BsWNFJpaDd8ynNeWhMAcwi3B5ZeQiZaAlV0sItxsrzvbu4ZYZtkjAkQds
-aaTWSwARAQABwsD8BBgBCgAmFiEEaWthmaKp2MKc54zA0EHK0uRSVQ8FAmCtdhoC
+aaTWSwARAQABiQG8BBgBCgAmFiEEaWthmaKp2MKc54zA0EHK0uRSVQ8FAmCtdhoC
GwwFCQPCZwAACgkQ0EHK0uRSVQ+G7wwAvaVPDgnM+i2pGQPwq6MkSzhKEG4H1pvB
WyYR8H9D3p/dE33IjVu3EEy1h37Nzdyp46KtASGNe3KBodSsh6gvPlV5pNGxMNbX
6fo8ZGtS83C+6uTF1cYmuO1nmi8P4+7qtcNZg4xv/ujAZIC20kemYKDth3FvPxEX
@@ -5095,5 +5097,1686 @@
IZVE+b8oEcmGzdL8HNwnm7e06ruZryF9LQA5YBmCKE0urigmgEvCzZsj/fMJ+OIZ
cAhE7UVae48GpW2kLATxmK01oSzvizIlmN3rVz2EnjOun2iuuEpF/lmDbjK5n1r3
f8npB1l1fT5cozzQJkPVYzhBWH1KXP5X
-=qJgQ
------END PGP PUBLIC KEY BLOCK-----
\ No newline at end of file
+=vnEw
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 2C7B12F2A511E325
+uid Ceki Gulcu <ceki@qos.ch>
+
+sub 10DA72CD7FBFA159
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBE+ZO+EBCAC3fZOOuYKthr0GcUge0PH2bh18sbM9XUmPKQz/W15l1NA/2ARS
+2gUXM0R+SunMlun9KsqjnojJ2ObVPvbm1Hg/66JSRgR3JWfIpSlJxLicpfu8rCfN
+bOjh4v9ZipD+px8w3o/RNrnZH/KRsoJg9yER6pf+pUZqTJfdg5lXezc1WF+/1qVo
+ypldMGfrkfLsPrUZTT689ubbig978e7eYmJEqldtaIwaAzHQnB70wIJyg/rEwFUM
+ldsvs6t6czSuJ4zPMvmh8TMpTg9e6+DMktPl1CWRONl8RPpgYMIC96gb4OnfDDjk
+Ex6clSCwgbDwdeAyOjjR6pVq+pCNTo1Pcj5jABEBAAG0GENla2kgR3VsY3UgPGNl
+a2lAcW9zLmNoPokBOAQTAQIAIgUCT5k74QIbAwYLCQgHAwIGFQgCCQoLBBYCAwEC
+HgECF4AACgkQLHsS8qUR4yVwIwgAlj6R9Lxk/GnclmSvgtTyk1r5GxJ75iSCzs7q
+DlNuM6EfFbuZvLWORGgP8KtdQdh/bdICtRbh2eoW0vEKJKkl0ZI0/RnVMYKYpIHi
+KVUSjPq0svwDk5tUa7taNSdHfi9o1G1doBHyPu1u1xDVzMSWsbEvx6aVr2HkBDRy
+A+VcmnX6tokZjyRX4C9ldX3tR+ffn7v2Iy0bIesM92nMPnH/fPXWlnbQKTxQeMj2
+qYSl3H/NGp57G7KNSl1na5U8ueMcUtYb+eHphMsmaEb9xw8dM96CzIPZh1xMHNoQ
+NNJibURysbUpFlGUTOv6K0A392QkX3GwuCQGOeLWHOoQHD6Jt7kBDQRPmTvhAQgA
+trGiCYnW3tqvDzaStXsguVw67pou65dO7LTcrX+NTvejJZ9SrC89JsfiKBwtvyS3
+X/qiB+S7RP21PH7SYOy+orwDw1nacNNeiTdPnxQCDQVNeWpSpmbLlA+0b6K3aPf/
+EaCKndXmnQyXVOoSXZJ9bqAe0um0NRbO7M+L1KArVkWW56ms+DvHAeZaGnSDDHQp
+JI5haUqgSWWP/VoPEU1x0qiBZwY3lokSwRMISC4E/uiUvvm7rvfbBzfOiVrjNPLl
+sVPiQRgOTfQO7dUZAmt2yqWJt1Clliby4fgBVcOYUx0QCMiz8MZGtSB17+hSrC2C
+b1T6n0ypxuYyh4sV2LtqMQARAQABiQEfBBgBAgAJBQJPmTvhAhsMAAoJECx7EvKl
+EeMlX0UIAKS+4ZAKrGG9jbWfzTTDbu9zzkXgV13suMD+XcGz10DkdluTUBXj8wWl
+p289fXNm4E49ipsNK+dcZ+gOATjUvb1Llh6D6bHz1QM7olxBCeU2feTmYYKBH8GY
+Y9JZzfAXNMQhcNiiPj+ntZqePy/EFA4uZHM7We7vl2c7CBcDAq1NNeEczo0KvG7A
+Wt6QoaMVmbvA14EKadNzrmEy9apkag1BKvwzXInYCvIHMa9ZqicOSUcI5QCYu5Tu
+fvIE7Eq3Khh2Ex1FiOaEA+57LMrt6NsSKXrB8JNYbI5pqE1rxJXZnYtx3ZpPAAEf
+LjPdi1AOkWhvhsoPmiGFC6ebYQ5eVbI=
+=9O4j
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 912D2C0ECCDA55C0
+uid Emily Johnston <epmjohnston@google.com>
+
+sub 37AE8263DA3084E5
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=X7Ws
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 7FE9900F412D622E
+sub AE6B5325E74ED034
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFnyVlkBCACe8zGkIlDV0dUKmk9PWe2Hw8qM9DdPbtpUOpmUOidGY5svQDL3
+eqvHk85TbxqFEe3Qbjjt+R+iApFuXy5kmueXTvwCm7nAU+k/pZtPuzHyhDs3iFFH
+8LCI/dOpd04LXLpuoeLCjBqPlOM+Pxiiu9h9tEnJaJzuXcw9SY3I/puj7qIEwxsJ
+W23gdPtYij9If1ht9gtTsDq9s7VbCM5vL0ofM8JVPilnE4oWuw9hjgIfT/QotbuS
+wPo+1ExZUfaKYPvMxi2kY3LZU3hlp6P5AxU+eI31yaYjtL+0lu66jTD6s8lwmF87
+QqjjxiHwic05//tp2Pk3PIZCoQurfEL6ZHhhABEBAAG5AQ0EWfJWWQEIAKT/0agk
+rbcbBEoXyTHiHag6RvreY/sNI+ayAEYLG+EfTigT1GD5I9YpOPHsTRcXK3IK4Fif
+0GjIZU+njlfmThW+Pqw0mxK7JbsTEl/UADteprSajW2OxQ9J4BbKGu5kJNocaadj
+oKUDcGzLgTULywLRRqlb100B/rpIOnSNZ4SRTfrp9rRFl7HP3acgMJNC/hhmRhE5
+frc/pJ7uE22ie2YoDolqMP7jo4saA1WB1Ipmk7Q8zIPxUyDlFQ3w9cepnryAnWKG
+NQnj32xcW4BpcpzGRtv5qMPp9g9DaPLhLW1ClQaYEoB2+2Ex6cRKGbCTqWxM3zrI
+fmr21M3AxaNNuoUAEQEAAYkBHwQYAQIACQUCWfJWWQIbDAAKCRB/6ZAPQS1iLuee
+B/9o8PAlAbs0gIi4y579CVYJQbjNbYVkvWIIoxiF9WfPb2Uz/kAbhjRKVxGSASKC
+LMFBSR4tUdqPehsuXGvUjnKuNo7AP9+u6TeugLWmL7WLSy/T95km/JU3dNremPNg
+NP9DDT0CjmnLseSwmy8Azy0hvDmGebGrT3Uzz/N2AiL8ffxAUFYo1ho+QLpYzFa/
+Qzjsq21x+/UMEX82awzO2zjkEOgT3wJUH/kzZ4tVWtseWPhCqksNN5JjBxNvslVI
+qs1vKnZazbuXWg2Ex7HO0GK8fPU4vEYljyh2sK27ErckyWUN2Wf8cd3CunqHtINF
+3FHqWVfvjMh1y1lWyKLx4ke8
+=aHTI
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 56028DF552BA32E2
+uid Dokka Release <dokka@jetbrains.com>
+
+sub 7EC19439E4D4C2A0
+sub D89D05374952262B
+sub B5681E477AD61C38
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGNBF+7lwIBDACcXIXAwFDoWvCCWn+OImyyJQvSnnte93Mc1ZJtlArkrjeGU7Mu
+5giUH+FOyiXlj7CU4G9RTnAzDgM8XPncWOERgRG2dXtO03Li7iUEX4Z8PCUGsTxP
+2VKGuCF4Je1ZPGxeKG49N0L3IIBBxfCzumE37LP3diw7Ups8xJUhZE1ecF/Ow4uE
+y6lBOyaJM8VJN65GLOdlbjOTKaFKR6aY7lPcEGyClh+SnMcGTocLf9joBpDI8WZM
+NQoQlVtiT6ItvbxjxJmA2hsodm1Ix/xX2xo3hdXH+opmsxlNGSK26hOSMKTMQXXR
+m96Slky889SPpT+Rnbp+zPSsWqUJBzTT83DAfH7PJ210bRuzHJZzSox/2iiVbm09
+e8rny09ju/OTA5sVvg0ibNscO2wyGsFjoBTFB4x27Bl+4bloBot2lBO7mRkhOIaT
+KxDkKPSw6vQnhA3a7p5nGMo20MgNhP09ui9CwO5Yh3kwnA81clldlMcjQMLy35ch
+kSoqW9jnqm2CI5EAEQEAAbQjRG9ra2EgUmVsZWFzZSA8ZG9ra2FAamV0YnJhaW5z
+LmNvbT6JAdQEEwEKAD4WIQTFNqKLyJ+yUCcsn39WAo31Uroy4gUCX7uXAgIbAQUJ
+A8JnAAULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRBWAo31Uroy4gBIC/4j7HuA
+MRfV8ZwUv7rdx8mnfZfwBGpra1M0/vyvcmn7ESp4+A9Xf/Kx7kV3b+snX3gRwlGR
+0HYOGRsvxVkifTc8mPkVcRv3/JgCRC5D9JTY0vUHPdIGhtHXXPKqPnXQcx93QMdd
+upZs6MsZGj/Bt69zwjESdTDNXb3iE7hF6GgnmhHAXejGMAdvFkcOckVNdntr+cO9
+tyssDgPRFNy+rrlePWuEwiOxW0FK/8JnonFozwIXGiqWbgL7UDhoyrW//hkqdfbP
+9Ugvj2HjuwlKs+gG9HIBGJv34IW9kdC3RGO8OroSy7hPo+18orXSYpbc3+LfPDyN
+IJsfcCCxQkFQvjsWTExfp61FVG5l6/OawH9zPqnSXbzfRWEWb6ef7EPlplxUDccz
+L4U1gnJvKyCLsZU5sTe+9zipuFjG5V9XQaUjPX4HAVwfacQIBXmmcRpRGGfin9Gd
+p6GFn3ZSKfZlgz19TpZWKSJ5PPRi156+gOODnnYy5NDnFCN436zSY9zOuO65AY0E
+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
+=utRn
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 56028DF552BA32E2
+uid Dokka Release <dokka@jetbrains.com>
+
+sub 7EC19439E4D4C2A0
+sub D89D05374952262B
+sub B5681E477AD61C38
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGNBF+7lwIBDACcXIXAwFDoWvCCWn+OImyyJQvSnnte93Mc1ZJtlArkrjeGU7Mu
+5giUH+FOyiXlj7CU4G9RTnAzDgM8XPncWOERgRG2dXtO03Li7iUEX4Z8PCUGsTxP
+2VKGuCF4Je1ZPGxeKG49N0L3IIBBxfCzumE37LP3diw7Ups8xJUhZE1ecF/Ow4uE
+y6lBOyaJM8VJN65GLOdlbjOTKaFKR6aY7lPcEGyClh+SnMcGTocLf9joBpDI8WZM
+NQoQlVtiT6ItvbxjxJmA2hsodm1Ix/xX2xo3hdXH+opmsxlNGSK26hOSMKTMQXXR
+m96Slky889SPpT+Rnbp+zPSsWqUJBzTT83DAfH7PJ210bRuzHJZzSox/2iiVbm09
+e8rny09ju/OTA5sVvg0ibNscO2wyGsFjoBTFB4x27Bl+4bloBot2lBO7mRkhOIaT
+KxDkKPSw6vQnhA3a7p5nGMo20MgNhP09ui9CwO5Yh3kwnA81clldlMcjQMLy35ch
+kSoqW9jnqm2CI5EAEQEAAbQjRG9ra2EgUmVsZWFzZSA8ZG9ra2FAamV0YnJhaW5z
+LmNvbT6JAdQEEwEKAD4WIQTFNqKLyJ+yUCcsn39WAo31Uroy4gUCX7uXAgIbAQUJ
+A8JnAAULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRBWAo31Uroy4gBIC/4j7HuA
+MRfV8ZwUv7rdx8mnfZfwBGpra1M0/vyvcmn7ESp4+A9Xf/Kx7kV3b+snX3gRwlGR
+0HYOGRsvxVkifTc8mPkVcRv3/JgCRC5D9JTY0vUHPdIGhtHXXPKqPnXQcx93QMdd
+upZs6MsZGj/Bt69zwjESdTDNXb3iE7hF6GgnmhHAXejGMAdvFkcOckVNdntr+cO9
+tyssDgPRFNy+rrlePWuEwiOxW0FK/8JnonFozwIXGiqWbgL7UDhoyrW//hkqdfbP
+9Ugvj2HjuwlKs+gG9HIBGJv34IW9kdC3RGO8OroSy7hPo+18orXSYpbc3+LfPDyN
+IJsfcCCxQkFQvjsWTExfp61FVG5l6/OawH9zPqnSXbzfRWEWb6ef7EPlplxUDccz
+L4U1gnJvKyCLsZU5sTe+9zipuFjG5V9XQaUjPX4HAVwfacQIBXmmcRpRGGfin9Gd
+p6GFn3ZSKfZlgz19TpZWKSJ5PPRi156+gOODnnYy5NDnFCN436zSY9zOuO65AY0E
+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
+=utRn
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 56028DF552BA32E2
+uid Dokka Release <dokka@jetbrains.com>
+
+sub 7EC19439E4D4C2A0
+sub D89D05374952262B
+sub B5681E477AD61C38
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGNBF+7lwIBDACcXIXAwFDoWvCCWn+OImyyJQvSnnte93Mc1ZJtlArkrjeGU7Mu
+5giUH+FOyiXlj7CU4G9RTnAzDgM8XPncWOERgRG2dXtO03Li7iUEX4Z8PCUGsTxP
+2VKGuCF4Je1ZPGxeKG49N0L3IIBBxfCzumE37LP3diw7Ups8xJUhZE1ecF/Ow4uE
+y6lBOyaJM8VJN65GLOdlbjOTKaFKR6aY7lPcEGyClh+SnMcGTocLf9joBpDI8WZM
+NQoQlVtiT6ItvbxjxJmA2hsodm1Ix/xX2xo3hdXH+opmsxlNGSK26hOSMKTMQXXR
+m96Slky889SPpT+Rnbp+zPSsWqUJBzTT83DAfH7PJ210bRuzHJZzSox/2iiVbm09
+e8rny09ju/OTA5sVvg0ibNscO2wyGsFjoBTFB4x27Bl+4bloBot2lBO7mRkhOIaT
+KxDkKPSw6vQnhA3a7p5nGMo20MgNhP09ui9CwO5Yh3kwnA81clldlMcjQMLy35ch
+kSoqW9jnqm2CI5EAEQEAAbQjRG9ra2EgUmVsZWFzZSA8ZG9ra2FAamV0YnJhaW5z
+LmNvbT6JAdQEEwEKAD4WIQTFNqKLyJ+yUCcsn39WAo31Uroy4gUCX7uXAgIbAQUJ
+A8JnAAULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRBWAo31Uroy4gBIC/4j7HuA
+MRfV8ZwUv7rdx8mnfZfwBGpra1M0/vyvcmn7ESp4+A9Xf/Kx7kV3b+snX3gRwlGR
+0HYOGRsvxVkifTc8mPkVcRv3/JgCRC5D9JTY0vUHPdIGhtHXXPKqPnXQcx93QMdd
+upZs6MsZGj/Bt69zwjESdTDNXb3iE7hF6GgnmhHAXejGMAdvFkcOckVNdntr+cO9
+tyssDgPRFNy+rrlePWuEwiOxW0FK/8JnonFozwIXGiqWbgL7UDhoyrW//hkqdfbP
+9Ugvj2HjuwlKs+gG9HIBGJv34IW9kdC3RGO8OroSy7hPo+18orXSYpbc3+LfPDyN
+IJsfcCCxQkFQvjsWTExfp61FVG5l6/OawH9zPqnSXbzfRWEWb6ef7EPlplxUDccz
+L4U1gnJvKyCLsZU5sTe+9zipuFjG5V9XQaUjPX4HAVwfacQIBXmmcRpRGGfin9Gd
+p6GFn3ZSKfZlgz19TpZWKSJ5PPRi156+gOODnnYy5NDnFCN436zSY9zOuO65AY0E
+X7uX3QEMAJpgrB0PwR3KYUthxrU+zvZvh5gR3Wumqs75dDrTsgiz6uDT05YEmflE
+O8/lvvZQmdQkv6RP1rRjlQsZEYjt6nlzwhlgn3TFIXagUMUfq39fDp0Eq1W4Y2hC
+fk/jOe8YMknYrFI9TGjAfwX0t/bZ2VYOE1FEk17XBNdCc/yvrgTtF6XSmEOoCWv+
+2HGfPNo2M1cwX+wJ43TZO2jxHOx//1DGV/gkLoqa3Yqe3ZNwWKVnwapnqfwlmrNJ
+C42Y26MtsIa4ktsOURpKgAB1uQ7oKtesvaKh3XwW65tgv0kMeixgvbRtrpQ3hDk+
+H9iGtIqx+C/1NvzfoIa8fKiby4D8+rXj5S+gjtwVZrY1t059wQSDJNCWmD4PG/Ro
+owYzdJmwfDxUMptcygJ6yYfn3psTbGF3HV/0jUzqrKDziLjCsKzhd2Lxca71ItQY
+bLDjCsI9diiW7U0s+M2PBImvDU8UWwqnprimLCVhsMrRAgaTb4mUgFF8MoK4QbRC
+pWOJz4joCQARAQABiQG8BBgBCgAmFiEExTaii8ifslAnLJ9/VgKN9VK6MuIFAl+7
+l90CGyAFCQPCZwAACgkQVgKN9VK6MuJ1QAv+Kxtjm8SphegcEb0aArn3zZS6Zzn8
+6qGb7QCZqtWACBo2/dDxaJ4Mr2jxTHl6DwvLST/eLUwoAmiEcFP7pIrexFwzpvQl
+aSZP1V8nnsIjaqFuedTuAD9JE8qhFA309preOkgICwBuAR0gCapePr6yX3yWH+Hm
+CuI5lb5uCenQrIuu8CkspFDQ/5zGEFjYPMrH3uH704rinD3OAJcpwc3iLag3IRHt
+FptjeLpG/+qJUXNwMkIy94UWRk7Yn2xFQKExJ5BLwNnWhMz0pIyWvygs+G2A+gUO
+Mp9UYbRK5ADw1THZkIOBXlCK7EhwZgDTy0SAv5nIhYlXRL1ttdctw9ZCYJG/pZbU
+KeqceUQYOED5MduZbWABbaM9Uedp6komYYLlKH4wjRf3KJVoDw3jZaa2vc4Eipit
+Z36JbbIOC1pBfl2Rye0HD1CC0yUuef0OF/iqKokpRmYWY/Q3xeKB20EMWSgP1xa1
+ewVua7ILvH3B/9j9bIH8pvCL97B/Z1ofhOwOuQGNBF+7l8EBDADF+SV+qv9/Ta0o
+GMwiHF49MvtH1a39gReG1sLt8TeYQDIsLaWTEwFu2jpEvoIiuv4diAJBRK+nhUGh
+LgrjTau6IS88unxVOh8H4IYsmCdTBJDHnBytdXw4vMOQxrXiAgZ1nYLIZ364csLd
+SCnui12WxPZPeCQZuKS0r2GAnkuLn3VqKQePaYNzgtAPjPn59BicOVvi7+HyYrSn
+W7Lif6MZjEzRI5JGieweSmF6mwQf/qx65QKDVDab1VeYZVvrGimUeH8TMj7ZtwDo
+dgD39oFmxJcu/1tkSI5WlEQHsqbi2Phli1wBTgC15sFr3xQ1idyVhsoodotKAY82
+jniEs++UFwHX8243Y97IKI2oI8rvxroV14VXykBp2Rb2VHLRhVJLPUnGlh6tlcxY
+2Vr/odbcmscGvSX/ef0Hizf/WAFmoDgIIMYtPZhtzo8nJm5TxXE0bKM24RCQvrmR
+tuvYCFGenzhnq6dR5gNbXI+LXSpRmVO4bw22Ld7bzGeWjWjr/vUAEQEAAYkDcgQY
+AQoAJhYhBMU2oovIn7JQJyyff1YCjfVSujLiBQJfu5fBAhsCBQkDwmcAAcAJEFYC
+jfVSujLiwPQgBBkBCgAdFiEEmEZTAaSTnAJ58uhH2J0FN0lSJisFAl+7l8EACgkQ
+2J0FN0lSJiumLQwApNFfDpzuoX5eAdfLQVrg4qIEtF6a3r3eQ6tuK0g/dir5zEey
+iygJde6YldkzuTaIaQ5wxAOOz/xOHbKjSUkzqc9lqPhd/f/hDJl9QpNqLTewsr8V
+2fvgE7LET4z1VgWTU+4MZbqm0X9nk5mHsqu5v6SeaEzjv1Hph5DS1AffTbfZXXUi
+V3NJ9Yka6HDgJFZSgegrUYplnynhq1/g8gdI0je/R2XYYWXgDBGPgc4/k3syFbVN
+wSHgEn8doP5lut+yvEBnd2qPLMNcWcrGwPz/juLnpYmrblrwpB9nevdQsPWzAuPl
+XW8wkgcM0Va9dTum7hmaPkLlivCwwCT7Hb/PZiXU7cGHzFKlr8Xm92IkyTBUdnC2
+Om4L1qjISn2mLNuC5PJpIb6OOUWOY+ygKvfwLI+o3sPPiFokGvzhX5yGhMnLiM9V
+SiDT8b26gDWHTi4DRJ5TaHQM04zG3jMlTZD/TxyoKi2rrE7kAi/J9HaUx3FT+q5N
+WzXUw1QJwcfdzkwdaVsMAJkRNUIY+CX5Zf8AyJJo8as4cHQJg06N0w6MkVbGgFMZ
+LtvH+0MZFX71Icj46CGyh9KbTqKFyQLovWxtelXhz07az0LfUwYPIaibIf5yTuAI
+6HLOoGZkKNXoVDS5NBE7oCaewut9YtQA+6YYUTEzvdW0jC922pfYOcO0NaDTvyTC
+YIYMDAA1yIRJXYao2pCtiVTYP8y8OzY4Ene++psvj4SMmfQxNykFbpJcVDN34oVC
+PyMY1LxKB+UuM5oUS1Zy6yjXmv83ARG0nj6bjkIJsangVmAk+ZO7QnKPEifNDEmK
+9/3avp8iPV4O1Bgo/UQunB1idvleLFWusHhVW5KpTNBvqdn6LIfSPVmvNwU4gsDH
+/L5qeOuxLFRYF7VC1t72EO3kstnryjPVzcN+UDfEiEjRu3Z0w0CjQHHLIQjKnWmH
+bI8PGab/AoNlOv4EXWWDFfnCgHBRmWxgB6F4ydp5vBGzkjY5P4ydU1FiAeD+V9rq
+FEYEcKzmf5V3VOp9Q7NerbkBjQRfu5eKAQwA5+v9FsmNVhYsRDwK3NfjdXsrl/5q
+TPERSLZHT2SiJpZSsslLAEkFh+rR77ejePmx/d4UjARzkQqYxC+kZvRGwXcnhgKI
+7/ASw9v8Z3dLnBfVZicK8/t7qBDZXy6bKibXqn2iavbqA57BJvjj3KsGHUelsABS
+NEvU30XzF1tbwO+IRr2WTA3Fo8RhPCDQh7NMpSJpR/8bmlnMPaE2UolUmzHmLie1
+dV0IHKTJKDlPL7AmRfDrCe5sE7TJaTYhn9CUfimUK4WQuzDjtT2/Y6gK/iMZmlFQ
+uOceaqisifKAcXaF6LtI+WoJHKezmkQ0QYpo8dQdSUPOQncdNEdBSdVQ412DAHAm
+9URcXAVyc4aTuP2a/GxlQ3yq8TwVuY1wWY8m5Xpr3OqM2mymYWe4zc/SCf5Zc1kH
+h5GvHxjGVlNF2DF8dtDDA+drqnvcOoZBDzoMZ7ivthL9qOrCSESpbRpjb5IKP3kT
+cZTQB6svgn4QwdYfl9RXscoZsoqGb7kcY6x3ABEBAAGJAbwEGAEKACYWIQTFNqKL
+yJ+yUCcsn39WAo31Uroy4gUCX7uXigIbDAUJA8JnAAAKCRBWAo31Uroy4j0CC/96
++lOuOefcfa3hiu6xfqhYirTInd0YPm5B5/+vtcGteuLAHNsh/jCCNLv0oj/vsnWd
+kDp0MEZCZnx7m7QGsoZxflAnikjtaYOkLE9Sgbp0gSebNNKcaayBAgIdKllTWeXi
+yvOfCOThEaq/WTDUUvSBh9e6ZnIEE+5JN8DTqWNwndypH99ttOweNRYF/W96+KBa
+ydjZA0B9zVq79l5rv9WLt8fmvF/vcOGQkytmRFTADf2YoAbs7eABjac4Zi2h9lh5
+b0DwWqzEUE/cHrROhxtibSu8t7eS865Q5nVLlF3miP3O5KrKyg8D+sPeFtxEDd5P
+XHW7gd5MKd5+2Mx6GUfapVlm2I1c8GkU7CcbyzNZAB2wNjjyXaLoGXoqIZi82ISc
+letLnX+M9fLHGYEt53Oj6ng1gtm777yw5+NILV2Our4yFLN8kl4KZkAMH/SpkTJV
+5/JDLUwztBP75Wsmk4e6mjHciy5ZY9GZlef53OSs6woFVHF8XjqIapJdEkbmMXU=
+=utRn
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 56028DF552BA32E2
+uid Dokka Release <dokka@jetbrains.com>
+
+sub 7EC19439E4D4C2A0
+sub D89D05374952262B
+sub B5681E477AD61C38
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGNBF+7lwIBDACcXIXAwFDoWvCCWn+OImyyJQvSnnte93Mc1ZJtlArkrjeGU7Mu
+5giUH+FOyiXlj7CU4G9RTnAzDgM8XPncWOERgRG2dXtO03Li7iUEX4Z8PCUGsTxP
+2VKGuCF4Je1ZPGxeKG49N0L3IIBBxfCzumE37LP3diw7Ups8xJUhZE1ecF/Ow4uE
+y6lBOyaJM8VJN65GLOdlbjOTKaFKR6aY7lPcEGyClh+SnMcGTocLf9joBpDI8WZM
+NQoQlVtiT6ItvbxjxJmA2hsodm1Ix/xX2xo3hdXH+opmsxlNGSK26hOSMKTMQXXR
+m96Slky889SPpT+Rnbp+zPSsWqUJBzTT83DAfH7PJ210bRuzHJZzSox/2iiVbm09
+e8rny09ju/OTA5sVvg0ibNscO2wyGsFjoBTFB4x27Bl+4bloBot2lBO7mRkhOIaT
+KxDkKPSw6vQnhA3a7p5nGMo20MgNhP09ui9CwO5Yh3kwnA81clldlMcjQMLy35ch
+kSoqW9jnqm2CI5EAEQEAAbQjRG9ra2EgUmVsZWFzZSA8ZG9ra2FAamV0YnJhaW5z
+LmNvbT6JAdQEEwEKAD4WIQTFNqKLyJ+yUCcsn39WAo31Uroy4gUCX7uXAgIbAQUJ
+A8JnAAULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRBWAo31Uroy4gBIC/4j7HuA
+MRfV8ZwUv7rdx8mnfZfwBGpra1M0/vyvcmn7ESp4+A9Xf/Kx7kV3b+snX3gRwlGR
+0HYOGRsvxVkifTc8mPkVcRv3/JgCRC5D9JTY0vUHPdIGhtHXXPKqPnXQcx93QMdd
+upZs6MsZGj/Bt69zwjESdTDNXb3iE7hF6GgnmhHAXejGMAdvFkcOckVNdntr+cO9
+tyssDgPRFNy+rrlePWuEwiOxW0FK/8JnonFozwIXGiqWbgL7UDhoyrW//hkqdfbP
+9Ugvj2HjuwlKs+gG9HIBGJv34IW9kdC3RGO8OroSy7hPo+18orXSYpbc3+LfPDyN
+IJsfcCCxQkFQvjsWTExfp61FVG5l6/OawH9zPqnSXbzfRWEWb6ef7EPlplxUDccz
+L4U1gnJvKyCLsZU5sTe+9zipuFjG5V9XQaUjPX4HAVwfacQIBXmmcRpRGGfin9Gd
+p6GFn3ZSKfZlgz19TpZWKSJ5PPRi156+gOODnnYy5NDnFCN436zSY9zOuO65AY0E
+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
+=utRn
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub D57506CD188FD842
+uid Andrea Lin <andrealin@google.com>
+
+sub 63F72A7A8658D653
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFj2NXwBCADPJcGfWz4Zsfa/UEUF6a4aAIjqCy+rNmLf9Vs3HD6B5p1r7VkC
+e0HhxrfbkDkQu6aEmAwV6GwYiwWBf/LQYNdKm1FYZFhKLhyuTPiirFqIouEFqiK2
+HPFdil0d6Bi6HB27qe3NScpqMK21ectpQfTGlmd0HrSN55pSnb9k+Dnx5MdR+XNl
+pfA4f5jNBIrnsCvaY5jccyFfvGpzykVF0yaSikbcs9hJ3pbfddLuBJ4Tk+yePDjR
+FWJ2Rtau0Pbaz4CebAIQprLfdOuxKQ8l7jhMZpRE7+sz1mU6fvDnPyj5kvnoU4SB
+tVvsnSuILeewp99/MG/wE+B5uqxG6KNpxRgvABEBAAG0IUFuZHJlYSBMaW4gPGFu
+ZHJlYWxpbkBnb29nbGUuY29tPokBPgQTAQIAKAIbAwYLCQgHAwIGFQgCCQoLBBYC
+AwECHgECF4AFAlmcwPIFCQFEv24ACgkQ1XUGzRiP2ELaNwf7B0ELv1vlB0kJf+zS
+NLRZu56NFXS3T8mbcJqpTY6bw139PfmfQ/sO2YQ5Bhta7fXRWGMvm1L+eIaJz8vD
+/pqtSfstYoPYGASXqBENkMX7HOYTL9O09k+OOLvcdCHlLlL5drBpARIgdxUYac50
+qMMg+z3qUQwcUBSTO9Ji9FZJD5MLW/NmGmx7kS3FgXawymarE4otJxBhdDgikIA7
+Ot1UFYYSEw2GNKHSY3iT//4AkwTqhKTDveP3gtsVAW6svHoBBtjdirW8tBLzYFBG
+Sckf4T5JdQyn05db3mjdXEa6q82umeHEvkugiSdUNAi/5fuh6fQaFKIkE1x6b5UJ
+1NKPR4kBPgQTAQIAKAUCWPY1fAIbAwUJAJ40AAYLCQgHAwIGFQgCCQoLBBYCAwEC
+HgECF4AACgkQ1XUGzRiP2ELDkggAim0CMooqXeHKR9cBvd9NI9Yp1rEi9iZD9zpe
+z/0o/b1nZWrMsm3oI1wRjrxuBw9hjuUfhkFUF4w2yRfrpNezGk+fboz5OIx/BFXr
+NXBh893X5/7sKmaRqNneGBgBK+5TtmlLrda4EAPB4wP/qs9IMRnoCkvE27+CQ+3g
+2iCuJKKuV0NyXr5d/NJDpN4CEa0IzMJcqmZncGn7gqKDVs2RQ7bkowE5MbjBl/hc
+FFei7E9jUfdYiJb5/59BibuYf1ohzvHQOyWSDTf6Lrf2Cckw6tfNkOG7S8el2NtM
+Nzo/pAduskLt274HXH9etr6HcIS0lTWrzmV2LTcVpZ4TpEi99bkBDQRY9jV8AQgA
+2FliQKFozvNGYlmHNvCgc1+4p9JVh82MKlF27k+S61XEGyOoZazjtKNcSOGJOMAP
++zdyCPzH+4cqZdcmgdSGdT71E+VGITC3rF1oSBGownKquogn8+qZ6sxmxmycALh0
+UUNtHX2V8ME1rlGMXt/az6se1oA9IxufuV94Gk/tX+vipSD0TalGqgIIyoK0VEWU
+2AvC/sCOAyFpNo7UCbazF+xM5XKjELELqSkkTyviJFWy118qJ9mt9K0Ttma0qZGO
+ouZuWVoaRBdYCVxrJzpIslrpuPrUufTjf6q6b2XkfnFQEfB+/Wn9Q/M2llUaBn9J
+V9X2vEv8OS09nlL4c9LIFQARAQABiQElBBgBAgAPAhsMBQJZnMEmBQkBRL+oAAoJ
+ENV1Bs0Yj9hCzpQIAMMZ7J4QXPur6jDgjpbWESvLbSSYGEt6uIMB8SEHBEJ1DdMN
+dRKu6AvUn7doVOhVDbzof6jGpycRFG4goL1fJM7pLljcOwJ+75FrYZCdC0syJPd+
+QkpueUHyE+/lZpvWuu0vlgfDkfIFFhC96/h659oTt5j82l5YIXanpgQg/AiKl9jo
+XXxvVt073y+ngFHpYhCkrdna6rxN4WRbVN2OlUJx8BP4tfFagYKaMSlPkA4003nU
+lwsPKQ8Bj4tASVSpCihlR5ijmxR3YxNlMET2f1ljvj8Uu3N0LrR9wVr2g7t7nqTz
+Rs0OjV+r+qy7eoZ4NBugYFXpP/RMAXZJezpKfKWJASUEGAECAA8FAlj2NXwCGwwF
+CQCeNAAACgkQ1XUGzRiP2ELJdQgAyTGXUBsbgDpitev9JPKu7DUmxra3cg/Z98i7
+FoPXAkyPXnCXTNXF00YJYQH7JubK/sSZ8gOkoU5/CgsYERz6i0yMEn5hTY3jypll
+CtYgUXWzXW3x4ilCm13NgjMJMB4+oVqO68Ie1lkt4LSs5XVIq3yCaANdwF67SUEa
+tKoFfajebBKVRq/n3ucIcxvQWpZU4q2M7bJKyPNqd3uLYUT6+Vwyva/EliSj7oS/
+cxH0rUjFZ0dIDuJ+sKRa8l3A2lrgOv/oSM0vkcE0CqUGDW2/ziq5AFB+owy8yrYs
+VjcMbgyaVc+WBwyVSCwsMxEoVcLnowGJ7hvsaYMNYyMbaI/2xg==
+=781s
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub B7C3B43D18EAA8B7
+uid Karl Heinz Marbaise (SoftwareEntwicklung Beratung Schulung) <kama@soebes.de>
+
+sub 02A4A6FB70018AD9
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=M8yH
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 40A3C4432BD7308C
+uid Michael Schierl (Maven Project Release Key) <schierlm@users.sourceforge.net>
+
+sub C0B9C2CC3DD97C16
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+ZmnjA2cUdtHLvchd4fiFbu191pbeIk/BSf10
+=kJKi
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 5E1F79A7C298661E
+sub A7CC6488427379A4
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFgRFtYBCADud9fmvTI8Dbs+9GcZUIVzxkL84QYHSDxI9fF+sxfAviq1U+YJ
+a+ZLIW7HsXx8vpn3hqIqAbDxHjrb6MEJ3OWD5Ks7O9Lq7HOhtqAT/mpV3fZmf6pF
+zdEw7c4UrfbtKyBY2kSBpKzTfu6HD3q4OBDm59Ezs2XFhKrXtlNC0fQ30ysBpIvm
+vZH/opwlBgyELKnAYJ6eCmdW1iiju7DPKDBOrGi6zgvslToLpnZeSg6hzSyjM15n
+Gx6Dgby0GNR4VEVze/UdOpsFVTSfP9qXgdt5ZOWQqW2Jg5V/ezvk+3Ok+ecfHWRz
+q8tHkagnqn0SfP6mLqUNvmvAH7xp8crH8L/TABEBAAG5AQ0EWBEW1gEIAMuetYIG
+cqEC7KdfWn6EKmO7ZucfOEirvo+WXclo48WX0Eo0gsTghKPGTS2kOzglwn/wYCbB
+VKzYaOngZljIcrR47hJiY/u7OH7EjiCiB0sh5WuEqOaCPPFo8lCA1+SBPAF+c1d7
+SfIEABL/WCc6e1rkKhe7wkBSclspL8YQUG3cr5G/cSCGOV69TsCqq7rtezjkSsfE
+5dxmcs39Ouur7hs25DKehufUA5bV2i51v49WIuTE8x53VfInYsJyeRs7f4sx3hmk
+wN+EL2mo1YFymGwEkp8iB0Jtrpsevl4AFOajl6X4IrdLn6+XSok/1mzIm+t1ZHok
+Q3mUWe5FC9c1Y1MAEQEAAYkBHwQYAQIACQUCWBEW1gIbDAAKCRBeH3mnwphmHv59
+CACEnAU1vbN4qxquAzNuaalyV6Hyx9olUQqPHopRGBA2ulPs0l+gtAXz5USotNsh
+3Ai5j39Y4J+qxN3HuDtscxEReogawzOo/B+1IKuGuuTzvL6fU6ZFUnEosxChAKwJ
+o9eS5xlyenyumTcXx5yB/5X5nqTes6tcZlDcEefh7K5IaazwE5caITBX0ze8g7WQ
+zRxyN+vuhY30U7P8TTKxAsavdSBVIb+Hp0e2W2S5T3ogXaGkIi5qllr9uhfX+E9z
+LxJJKfJot33ix647mPwpXxo7K6teo2rkwOTQij1sEe2sbMZiKZkn4rYSgLpZiVLP
+iDYuP3RTuHnFenYROA/YcDvA
+=ifIo
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub C9FBAA83A8753994
+uid Tatu Saloranta (cowtowncoder) <tatu.saloranta@iki.fi>
+
+sub AFF3E378166B1F0F
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFeWvEwBCAC7oSQ7XqcGDc6YL4KAGvDVZYigcJmv0y5hWT4wv9ABP4Jhzr1H
+NDmmGyWzhzTeMxwuZnc9vhxCQRwyxj3gGI5lYPEARswbi2fWk//78/3Wk+YMHJw3
+/1EO3VqvvDUt39gbaSqMCQNHctnFdb2QYZ7nRFTQeCqG/wyMdB05beqEnWEXzjeP
+FDF9y6gXkELn0lxUm2TKO8tU3h96TCuutDKJ0aE00lOeh/MbEaGHEbIU8kdfui6U
+znZ1X80EWbkCY8cKxEZHKD0aONSVHXwE6nETvFW9/9+K+sj/I7ytlyxwHsaQpi1H
+6aRGnq013VsIECrwkhmXBsLLXNjmhER+LkcDABEBAAG0NVRhdHUgU2Fsb3JhbnRh
+IChjb3d0b3duY29kZXIpIDx0YXR1LnNhbG9yYW50YUBpa2kuZmk+iQE+BBMBAgAo
+BQJXlrxMAhsDBQkHhM4ABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRDJ+6qD
+qHU5lFtxB/0QBiKaHHdFu3GOs21+S4LZYmO0bvHASg7ueeWtoE/1cEsKqvES03Tw
+iSfMabaPt+UL4qP9w6/SUtTITAmxuc1ksyU+HwC/R1QuF+vdsguFZ0/8VdVRVY5I
+5/6Dcp7kI49RO0LxGPXCMn8s3Nj0KXiCoodMDLHwwMv5OXWrQQ4yXiQTsJudBxy5
+o2yfp0AlLm4uZdDLj7Z4u4DfyKOuKIUMsMQ2Hk12gSkDaZViIURH6MaSEdC+XbDU
+cPTq27+JSdjfYEX0908P/bH36H2kPCGVh+sXpICZ/Ce7m0OHBfE/pTTCuOlAJvcL
+Y4QbyMTlyPpZ0zFgO+jX+fj8UFi2sRhquQENBFeWvEwBCADfbjqRN1GvSf9VkjDD
+WBqX3hILiPx3DKPiSFmSsAoiLSEkP8gRDBDy6po/Oez9q+bgb9Sk+iGifJvbVNZr
+7+88LSxQECsrVL+ZgTAZ2LkqABQJ8XYh/dTO6BMJ5rSLH/YN6bO9V4NjYod67W5u
+Yox+aCp6keE7ia7eBHck2wyqxikCqvVzmAduPCkkNSRuOwLkOguduXfwb7Cg1Rna
+cMMEfDd9t+a6ytY/8JFu01G++VVxFHO3vs//RINrm0O4xKPkT1+Ocd4+h3DlhhRv
+RXvI+MKeM0ud0OpUVCBKCZqbFKTVgoRpsKC925ZRUSqbmyBcIkqyYjzD1adaZdkq
+4PLFABEBAAGJASUEGAECAA8FAleWvEwCGwwFCQeEzgAACgkQyfuqg6h1OZQ6swf/
+Vm0ndBcvdK0qCoubR/WOsynS1wdQ2rGKJC5oVsUN4YVCZhg9OMhwMSO3EOBPdxtq
+4A8bSZp/8ZWmHLohE8QHD8AgaQBtRZyNkvMRiN157XGkPEBRWdHw6XAvx/lE31W+
+19qFRnAE8BbERE3gieJcG4CKWy5CyzXnjSM+znZvDQ8J7MfG+LxKbr7zUHQH9ZWs
+k8V9D+GXDgpuyZc4ct1tNDLcn6784FubcdrD3RLMiOAYSSgKSgoELRzB8zZds+WK
+FuiAYXZSdzCbjJJ2VqnJnQtYHN7Z5r3ySqbG7w3rRen+Ett6PX9Hrvc1MTy/UUdb
+3s08C0wD0x+ZzFzqUXKTZg==
+=nsI4
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub C1B12A5D99C0729D
+uid Valentin Fondaratov <fondarat@gmail.com>
+
+sub 606CC6C4533E81A2
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=Pyox
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 3E3D777C909A447C
+sub 7ECD484BE871E4BC
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFhV2aoBCACyHcEuTUn5nVo1ODvWvgBgV8b6Aju4cVAhMNIvAdcOYf+N9Rgo
+Y/669/P371uN2hc4SxJeORBjHyzkAX2sJZQj+FwdvGl60YX9Zv/NQaTzC1WFMRp2
+rb0QGj8yia+WA+If6hatbZmCg87CtDVpzpPIZUzX4UO+DRQEhezflt9uZ4YrFoYq
+PmbL7znqm7/3kpenKrNoinGnzFG7wnOrDfMrBrZgL0Vt95zvs/PBTyE2r4GWCNms
+PH6n50oTck5Lif0EtnIp26o9+vgkVVAFcHLUDy2y90g67j137SNnYu/47FD/rS8R
+A2Y8wRd6lXXxI/n5Wyj+P0Vai5zq6BIFPMbpABEBAAG5AQ0EWFXZqgEIALkyl8Pp
+uR73iYx+7kxnZJl9+65Dl+ypenMj7rattbWxvXBoazqZUyTfZQ6Cve5JtmDrNekh
+lZSkxELSewiwEBkS1tajwEzJVuoCefigAGNRhXo/g2Ti2MvkY8cXU/oA0iF7fJEM
+AJRE8EjYMpqed061NXQxjzI6HdAHxW2sCbcaf4GiP0m/jJMy0UvjQO4NXwzQLMur
+cI8cJi+ZbwlDviTLZRvL15SKIj+zeoV5OD2M2BQiOCUdR+GjYSAZNODKFJ4CY9lj
+V3zyWEHn9w6gCa82kKbognUAKuhfRoJXTB8r9Lox6QNiQYpHMZUda3VHaNmKp3Pd
+KXeSgeiDuE3zfLcAEQEAAYkBHwQYAQIACQUCWFXZqgIbDAAKCRA+PXd8kJpEfEja
+B/sEX1sl1BT1QzTeFKwIuRxGPwmtdABrkRJM2nGUlc+HWLaHzTgMcUVXzgKGa9TV
+BAjb1oMsSGfGZHkIvHxjfLkt23nCFQFppI4vJfYw0aQtwz7P4P+8C+AOVRs76eBn
+Q+ox5OyglT4hJNQ80WoyN7AJ7ZqUyi/SzQfS6T+DXVohQPEzzBByIEqjLr9Sc8nJ
+4I3dGa/Y6Eib4SFPo9/Bby/xfpf6KGu0yqUb+n9ngJcpbNCtVfW1IWvSoRrMo16q
+JcsR2duRnN1Z8RCiGUukeUK8VW51z5nf0lejCOHwUq3KzYEfdYh/V69XpW8HABZb
+aJnPf9/+8V5hzGhH2sSZ2OZp
+=Nyib
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub E93671C7272B7B3F
+uid Rolf Lear (JDOM) (Used to sign JDOM Packages) <jdom@tuis.net>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFCPD00BCAC4tY8wMQTsCKyII/mMkUDAkXA2cLM47fY1Wn+iohtgtalUdA0v
+AhGvTdFU6/St35rOKNoyLC7Sy30FBYpAEfMB/x9j/CaQtdtGhaQU0hCvtWGhhS3J
+BJb3BIzhKuP2mx+6tgSPtP/meiF/K1GV8x4s+4JyrVxSFtqz+yp5szFNbIXA46cg
+UWOkzPhwA567Jf/8dUWysXb3lp59DG9anp2BQENwh/EmUhuhlPoM3PeUIPcZAiyD
+SMJCR/KooLzE78lAOK14oD8eV0qg3tT0R5RlsNKfFRRoo2bwwPhz0SUVqJlt7ehd
+By6ztFKej4M4ZKonnWUiVJhKEGm3dVoEAJTZABEBAAG0PVJvbGYgTGVhciAoSkRP
+TSkgKFVzZWQgdG8gc2lnbiBKRE9NIFBhY2thZ2VzKSA8amRvbUB0dWlzLm5ldD6J
+ATgEEwECACIFAlCPD00CGw8GCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEOk2
+cccnK3s/HJMIALDETleTycLBl02uRg9ZRwPNWANajpfeJK9yY/SgpVfVn0ExXtY3
+/1Sgc0kZn66c1ohjv3DhLJYTL0GgSfb6FmAkvXMTDfFcm3hMMQKBPTUxRKw+gmgX
+ITrrZbXZcEprlF8GWlAcpv/9X+m5X+u24C0nR8tOtwZkwQa9oUKyUajYrt5KUJUN
+JoVpd8ZDWspXw7HkdQaC+tMjU1i8rypptfpnSvHFXSgH49pe/EAT1C88mx74eGMR
+XGJKL4VdzvNi+m8ECrM1GE9+EHBBLExL7NEd17N75ZYQq5HTQYKEpWZRCewOFJS6
++QWMp+oawQ7VUApo9bhGSH1E7X0IcVsqVr8=
+=bCVv
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 8671A8DF71296252
+sub 51F5B36C761AA122
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=Om3K
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 280D66A55F5316C5
+uid Brian Campbell (key for signing maven artifacts) <brian.d.campbell@gmail.com>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFOOGVgBCACiDwUZOc6943aBGUrxikkfUnsyZfHtF9jihYmA1pSgfsye+JxR
+oG9QWW9+3qx4L/d4ZEqBftTWpsjyrY7NyMaeXtJEjE0vhiWNehgXB1z4XTJ66zCX
+nhlMvixGLQtfZANqCxOmtUGoSXw+oRFY/SExAioSS19HlSxApSaUzc0prdujqp9k
+vOKKIBWTBIUELdDTA4+enfzkAnIINUX9LcMTmO+Fh0AvfjDbq4fr8rBglyVUSCqt
+TOT4oGZlbpsq9TOKrTXh5go0rm5KJcbgKvX78ZErK6pcpTgNA+XFXCz1rQ9nkIQt
+HxWaEMJtpSkIvHIBz9qoAroGtNFzz2oF4ElRABEBAAG0TUJyaWFuIENhbXBiZWxs
+IChrZXkgZm9yIHNpZ25pbmcgbWF2ZW4gYXJ0aWZhY3RzKSA8YnJpYW4uZC5jYW1w
+YmVsbEBnbWFpbC5jb20+iQE9BBMBCgAnBQJTjhlYAhsDBQkSzAMABQsJCAcDBRUK
+CQgLBRYCAwEAAh4BAheAAAoJECgNZqVfUxbF1XUH/0MAQuR6/Qupsw/AUD2/TjHT
+OvBuTyq+0sCLx0yf96qHwarg6rMHjqT9BBnIrSjV7TChZOq76u+C6F60LfUZdgfy
+Q3VvoSE35WWAWXk0kmj6udWicioD8K0U5k62Ijam9HsEjOxQbuWWFv9EccIUaYjb
+v6GhoNv6ordy1TaIJnflZxR6ZzBAg5JPgjITrurKH0x8jq87/GUcbxtP86BH207q
+c8R1mwQeBkyjPPv/xpd05Kls2arGZRVPoi1tudNtX2+QtV3ArPB+fLzBymZ5s/ZX
+ZXFLJVEO0lHUa69Phc4I9qAbAbbtZ1PVFpu/zMwSt6NcaVhVDG4e/dzGKYpo4Gs=
+=ojtl
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub C727D053C4481CF5
+uid TFLite Support <tflite-support-github-robot@google.com>
+
+sub 29E792953D515FC5
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGNBF8pVB0BDADcwRGpJUDe8eVSlJ0yPQl/CyeYc0RWq2f1seUMQO0xFW1xPIeL
+IE68D9VdgarA88qDLYesfBqzn57/r/ztj2aLEKt8IRunJzd0w0G2rrgSCZQ8RmzL
+b6qNocE4EqOluhuzHBI+1+tqoZfVTkfhqKQw0RjP6gHPrelYPuxmzXX3dbpf9eam
+yDdr1tztvI8iIwYvHoy2HNmkXMUJwlzKsRrU/x3SMnEqTIFqGDy32zQ9QdnMtVbd
+lCc9IWnleospZN52+jeXoMhRJYc/pSHSMu7DSo+rHs9a4NxHfaPnuOsw/Sn0450R
++XbBV/4oeWuJ7g+MXvLepB1LTC8tETWwYFPyA+qmFhbFnir+i7JKEEYO3TJJgkLG
+xlXlM7DAhHIky+jokeNl1n2QhSSuQ1dq9KCLlrpDrSGXaBvtonPyBT/Ik9YGgR4/
+ARctQLaQ5AucEPHuZZl/d71499y+IP//ui6SOH3LBIs1nqFmTGXMoEGHbIyEZvjk
++wLnG2YrlcpLtl8AEQEAAbQ3VEZMaXRlIFN1cHBvcnQgPHRmbGl0ZS1zdXBwb3J0
+LWdpdGh1Yi1yb2JvdEBnb29nbGUuY29tPokB1AQTAQoAPhYhBNsFl+MUQ0Ila8ge
+Pscn0FPESBz1BQJfKVQdAhsDBQkDwmcABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheA
+AAoJEMcn0FPESBz1KQEL/2jzYQUJRWJqlzHcv3J6a4M44uWcOwg5T8ErQcFZVi1F
+hJlf8nLeoU2CCb/pvEq11c72/dP1MPjZ/re9Cn7PPoDkXWwsEGeCUmeyzliTgoj8
+n2LWoqH1G6xcsQiZ+BCS1LgMR+KEBRMTICC9Cv+nTx/5o2TyVssNCYMMm8y8s0K4
+xzt1CPaukHGdWxE2BR+oh4qybqac4Qjq/jRgdxxo0aEi0A4aiR+mpCvLxHWLw1jq
+YypylhJZXZ9eLaeHqcHMZrUTy5JRt8BXEGnYxkmvvTh9BGiqIbv5c1PUauJ3e/AM
+1dWLLQytyoRVE9vsIeD5/2NDs7eWru6oNIobPnv5gfyMoabMFktg+ZgW995bqTRp
+fpNvFjuS3YdFzESScut/iPzN/OdG4jdvC0PtYAtE8aBQosPYRFWzT97aUP6aN3jd
+lNXVkP6d7p02EuIdiSYebU8QLXcYMRcUMlUWgNrUZNIRQNKbKfEDbuDScmA5/KwR
+Pt3b2KjQvX4ekkQ08+hQSLkBjQRfKVQdAQwA06Zqf4RRCqPtmx4nqG8wXLUayoWq
+4hIQpkajt7UYBejFrScJZeE7Oo8HwiQzPs6iBMUQQeZBn8gQU2/C+ZvTD9WjhRFq
+I0CXcCS2VL7nciR4yMwKrrlf9LJAhBjKfw+07VEF8D/xDTcYuGXFIuDtEu3Ncq/t
+8C6ybjVOFGtNFRsGABiMm1PKIA3496f6GQLo3oioU5jizCrgouk26Ak2hK98i3+u
+tOjVYBIcQ2Y+tUxV6AucSAU1zLVqVj+SY/kVaj7hp5w2sGVn+4r5dsGIUG2K/VjI
+PXOfmpMtsuOLBN2z80RtO/b5OjHJCftjI9KqnyAozw6LpbNkmOhRnfAPaslfxUyx
+iHbRg+RJ4eA+4ZnbAZPzNvBt9TLervLhYeh42d4XGA/uicCCwMyFUxztOQ+oWpY4
+fR3qhUoGNKmEetBcJtK5z+LQipd9GuRKpylJBG9eU7ecimrmI5pMLnNjJNkyvd5V
+DCoO8WbX0AO8MV1s/08sduAnHul9W1u+bkADABEBAAGJAbwEGAEKACYWIQTbBZfj
+FENCJWvIHj7HJ9BTxEgc9QUCXylUHQIbDAUJA8JnAAAKCRDHJ9BTxEgc9Se7C/45
+UwrGhyd7CU4dMNgpBW0a+7cFcbjfyjSNOgPDbn4P5B3G/o3sTOf8K8O3nMgMnQ0F
+H7TeLwTxc0vF7r26jG6E6YCZU19yMef5xEJa08YqUNJkJ+2Fopu4WhS0mEbpII5o
+9fMQ93urEEj38hCV8lUyPLUPQpWrmyvS0Pta2Y9xDpYKy+bKQLMlRGPna8MVNXWF
+Ud4AaOY+us8/rbRTWURB2YuWyPyetXw8veIWLJgEmbRijkZbUVroUJ70OXB46dOE
+VktUJ03N9zX2SpiIJ2Lg4OAdi8tdp5EklrT8Sp1vGZOcwA7r/BbpWesIqbHNftRM
+jxPuWZ0ROY4m7xzhexeOAn0HQNg6INswfXKuAJJNv+DEe9nTxpi/TkO8Ol5MYDIL
+vKyZs36osPk0L6EEgVzrqH9zUKTiq8toczTtb0uW8f9Mru1UDtme13f1tnq+z94Z
+cR19NEV8Rfs96NyYYUvfC+ro4to0pXe2n4X3BixeaBmNdHWd9YYgXjYxnM4pLyU=
+=zvsL
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub D9C565AA72BA2FDD
+sub 9121AD263441EEDD
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGNBFrjUQUBDADTMQL/4d9EyVhsO4XBH9wbGWxcEJvsu/HvppN5fY8hpMV0+Cr9
+wjAeJ7d9zdFJVB8vPLN7bb5dm6SNyK3KiOugqVgZrQ+ZPTvCCgFbFyEXuZwDiOa1
+9oMwKypq+GyAqXnfNkQTx8+7PAKslPoEKeft6g7T2+hb73nf2vpnOfpp5ljQhWPe
+YEO2kXIikCxVXK5uSpuq1JLjLB+AFsnERCEGqOCueQgrLyPZnGrk6i3pEyz8b6Mh
+8NdFjztqBWUta+e26Z00CKEpmGYzoV3sHD8Bhf8aHPWUHp9lGIAW3klLbsp1+FVM
+20eF+a/f7XK9YBzd2dqIYWELdYUB+XU0EPFTgYAsXG1Z34ObgOVjU5gjDSNYfvz7
+tPPngDB7k9w7n2NatF3aHpHvkgekaLlflmZ5rQnMadhBUWgJoiwsx2q4TnSh70/t
+TI3dPBbdVG+8YQ/LpNzOVshY2uMHHxJq6lUGVl6BIIy83Yslu0gFYHzL7H2tXKpg
+Q0qAQBktmX6H/P0AEQEAAbkBjQRa41EFAQwAquSR3AR/8vClCEfG5TjqL9+eHEIF
++MfnheM58ONv+ZW96S6WBfYALTzLNM0BYcIChRwq/EsWWPp2IvYdaVC6miyV3jS2
+YqWqFLn8lwC8lyaI7wX+ee1JY5b2TOCep9MRzFTOTbh8RpJDaGcjK6g6rGq27C2N
++bLIs3Pn8F6uHT5shp+YQksMHNWfw16hWnSvI0naO5JVccLZwZThZUqkN4k9KPaa
+QeYdd+coJBmN730rKq8VxNgoNWO70AXa4Qt7ddnSAmQM6iP7H2C+RI8NQ2GNh+HO
+b21jyI+ZkUDQrFJKLReAbfyADhzedJT6aAyzA60wJwab05lP77CzVn2dOpzCY/hZ
+uM2faz33YEZ03RapYeYhRIUYpXT0nR03dc8NbRVtUqYFSKOPab0CI5UmnML82v6G
+o8N6eRTiSXHGwGEbr3pCLwTFUJTYdku0xGA9TCnXTjUsNW7+Cco6bTUmtEZOGomR
+GBhI0qG9Uj73jWXNZLgLvfFYj27Sjb/spVARABEBAAGJAbYEGAEKACAWIQSwIzWq
+VMzyHlK7+avZxWWqcrov3QUCWuNRBQIbDAAKCRDZxWWqcrov3fslDACSodXt2F9p
+haTM9aArlcNszxMLSb0ixO6ufdm9PS8kzlziot3lZrxVcEDEkqM9CUHyDaAf4ZB3
+geb81NGrYDdrFEwNYVaxK19ay3aYxKyfup+r1V32XKxTF348JsboZ72wKig0OQpt
+ZnspDq14BkSIJR1SQbOCkJwnHUv29Lsro7NxN4QUddYwLoOHlFwO51jlSO1ngsYy
+5QOfoAszn4kV9zY5eJAUF/npCHMTvPACZn/zZUo0ycxAt7f6NE3OnTfmWMaTk9Hi
+AgucaxI9lmk6BN3FOOeUqt2VslIMb4k1pX7FRRsvzNuWTJO9S8DPlpg4WjzWtu/c
+HYCSq6h3mwojlt+h7SA6Ctl1uA+umidvPp7ozubbxsGdCCdxGSVg4zX/L02i+5fE
+zU7kkPUpKBx6hHg/zJnwTVAY/g4+Iw6CHwBhw+2/KoMpjQ63VqjwQZ6+VIwdsSCh
+4wzAJkf+DhvDmH/G9sIawu3JcVj1Pza0Iw3gLf/9xZrbnl+HUEcs+F4=
+=Uwqi
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub D9C565AA72BA2FDD
+sub 9121AD263441EEDD
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGNBFrjUQUBDADTMQL/4d9EyVhsO4XBH9wbGWxcEJvsu/HvppN5fY8hpMV0+Cr9
+wjAeJ7d9zdFJVB8vPLN7bb5dm6SNyK3KiOugqVgZrQ+ZPTvCCgFbFyEXuZwDiOa1
+9oMwKypq+GyAqXnfNkQTx8+7PAKslPoEKeft6g7T2+hb73nf2vpnOfpp5ljQhWPe
+YEO2kXIikCxVXK5uSpuq1JLjLB+AFsnERCEGqOCueQgrLyPZnGrk6i3pEyz8b6Mh
+8NdFjztqBWUta+e26Z00CKEpmGYzoV3sHD8Bhf8aHPWUHp9lGIAW3klLbsp1+FVM
+20eF+a/f7XK9YBzd2dqIYWELdYUB+XU0EPFTgYAsXG1Z34ObgOVjU5gjDSNYfvz7
+tPPngDB7k9w7n2NatF3aHpHvkgekaLlflmZ5rQnMadhBUWgJoiwsx2q4TnSh70/t
+TI3dPBbdVG+8YQ/LpNzOVshY2uMHHxJq6lUGVl6BIIy83Yslu0gFYHzL7H2tXKpg
+Q0qAQBktmX6H/P0AEQEAAbkBjQRa41EFAQwAquSR3AR/8vClCEfG5TjqL9+eHEIF
++MfnheM58ONv+ZW96S6WBfYALTzLNM0BYcIChRwq/EsWWPp2IvYdaVC6miyV3jS2
+YqWqFLn8lwC8lyaI7wX+ee1JY5b2TOCep9MRzFTOTbh8RpJDaGcjK6g6rGq27C2N
++bLIs3Pn8F6uHT5shp+YQksMHNWfw16hWnSvI0naO5JVccLZwZThZUqkN4k9KPaa
+QeYdd+coJBmN730rKq8VxNgoNWO70AXa4Qt7ddnSAmQM6iP7H2C+RI8NQ2GNh+HO
+b21jyI+ZkUDQrFJKLReAbfyADhzedJT6aAyzA60wJwab05lP77CzVn2dOpzCY/hZ
+uM2faz33YEZ03RapYeYhRIUYpXT0nR03dc8NbRVtUqYFSKOPab0CI5UmnML82v6G
+o8N6eRTiSXHGwGEbr3pCLwTFUJTYdku0xGA9TCnXTjUsNW7+Cco6bTUmtEZOGomR
+GBhI0qG9Uj73jWXNZLgLvfFYj27Sjb/spVARABEBAAGJAbYEGAEKACAWIQSwIzWq
+VMzyHlK7+avZxWWqcrov3QUCWuNRBQIbDAAKCRDZxWWqcrov3fslDACSodXt2F9p
+haTM9aArlcNszxMLSb0ixO6ufdm9PS8kzlziot3lZrxVcEDEkqM9CUHyDaAf4ZB3
+geb81NGrYDdrFEwNYVaxK19ay3aYxKyfup+r1V32XKxTF348JsboZ72wKig0OQpt
+ZnspDq14BkSIJR1SQbOCkJwnHUv29Lsro7NxN4QUddYwLoOHlFwO51jlSO1ngsYy
+5QOfoAszn4kV9zY5eJAUF/npCHMTvPACZn/zZUo0ycxAt7f6NE3OnTfmWMaTk9Hi
+AgucaxI9lmk6BN3FOOeUqt2VslIMb4k1pX7FRRsvzNuWTJO9S8DPlpg4WjzWtu/c
+HYCSq6h3mwojlt+h7SA6Ctl1uA+umidvPp7ozubbxsGdCCdxGSVg4zX/L02i+5fE
+zU7kkPUpKBx6hHg/zJnwTVAY/g4+Iw6CHwBhw+2/KoMpjQ63VqjwQZ6+VIwdsSCh
+4wzAJkf+DhvDmH/G9sIawu3JcVj1Pza0Iw3gLf/9xZrbnl+HUEcs+F4=
+=Uwqi
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub F42E87F9665015C9
+uid Jonathan Hedley <jonathan@hedley.net>
+
+sub 6064B04A9DC688E0
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGiBEtsF2oRBACcai1CJgjBfgteTh61OuTg4dxFwvLSxXy8uM1ouJw5sMx+OKR9
+Uq6pAZ1+NAUckUrha9J6qhQ+WQtaO5PI1Cz2f9rY+FBRx3O+jeTaCgGxM8mGUM5e
+9lFqWQOAuCIWB1XPzoy5iTRDquD2q9NrgldpcwLX3EVtloIPKF7QLq72cwCgrb5X
+R25dB8PUdZKUt2TtJbjB+SMD/1UzAPirgX0/RpL9wUR1i14yIrTfpFP/yM9PE4ij
+qcZ1yafVdw64E1k5W4k+Pyl4D8DvSJvbJHvYjg8/G9V66WzaKcv+987fetUuePvY
+/rwxBPztqq8y6+hjBc8QVhZGWmAoGGEFO6MIGsSyN5ohqPMpNXkczIo+NMvDxGzz
+ld5ZA/9awGTsigBdpBK2F6GOmbvBv+Xebu9rbaJvBvP+npNx01s/f5sHPCxmBTFk
+m1vtaMdZ29RovrWPSZRj8WWes0bcisw80250r1CBlYzGzqEVZ7b0Hh2RfkfaxbYh
+wikyfTfA2iX8TUGBgirsZbyegjUadElhwFNDASnvLTEuQKeVLLQlSm9uYXRoYW4g
+SGVkbGV5IDxqb25hdGhhbkBoZWRsZXkubmV0PohgBBMRAgAgBQJLbBdqAhsDBgsJ
+CAcDAgQVAggDBBYCAwECHgECF4AACgkQ9C6H+WZQFclGlQCffKOELC160VgHuKqd
+gHjyCWuaUYYAnRqzXThIBCJiqEsEtNL1hEYqI2NFuQINBEtsF2oQCADSxnQlm9ag
+ogZv6jow7Ajqne4xv6JYHB1h+iHZE+dRl0HAaEmOnfYKJO3ZjepgRyoLk28XkVZ3
+HWbko5B7U75AWio8qcLVs+P25k6MtWqXvHm1LAJ48how0H58zESHmFjAta0HPyet
+0I+DCb6cDB5ygTxh+umatdmT9gtqTngU54TAtho/wTi7YUeISo35aYoyMhHAvNWl
+gCtZEJtMuFJIrJEHLtTESi9Qf2Yhrhi5Tg9vZHrgvCikwcIGbmjDRTyQLDy+lbjQ
+asFz/Z5oh5cJfZcnvsT2z1k+BboygnohzXFXq+gskogRXy3jh14o1LAN9U1kfHJ6
+Zoprz8aCmNTnAAMFB/9TMvmVdGbJN0mpG8ch9RXeDgDdfvt3e86uhpvworDgwXLY
+uJOKg3tu0orET3smOnbVhkV3sqmZ+7aL+Sv1BUmj4NLF7anbFxCjPJL6VrI8ryH/
+rUuHKHy+PNXkBRYDlm6n4/smH9ZGWH0bGzSTS+KZgwUoibDeZmvgQDxQKPZ7zlcg
+c0cF3QHVUi6Srg6NThCFGu6015sjLcZnfnKVxpdPm/XxGr+JEkC4kWgLNdRoT3T9
+X3/ahvwDUJgQoYuhy85CAGyPv7aA/lY4/5bEjhNY8Q1EoxVyFUETzNX7thmJqE8L
+A5Cv1NBYxpQgnFnznKvs7wOEk4FfcHsQch+mgANdiEkEGBECAAkFAktsF2oCGwwA
+CgkQ9C6H+WZQFcl+zwCfc7b8hD9OHMusz/ZR7dKl3a7nA34AoIdTiFJNKRczWAbd
+z17znsg+RUG5
+=IC8t
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 056ACA74D46000BF
+sub DECB4AA7ECD68C0E
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGiBEoo3BYRBACXE2oGRA58Ml6s+kvfk6n/AJ+5OFeRT/Xelco/cpdxOVF5LkRk
+yd+vR2+F9ldBlH7CSTCmrdZIN3M3zrcWndrk/OQkCxNWVnE/a1li7L3G9nYr011k
+MwMM8MLkdf1Wr+FBunf1qpxPYuydfjWGFL749hYr4uQ8RbFDRQcmWLYCRwCgl+ur
+E28AmiICPcje59DNKHZZxd8D/Rk1LcZojARyMPjEsPOVSOh6kOaJQ/FOKN0j97k7
+ZqA+4C+OnIONSy22uMia9xO5g8oMLyHaRiA4S7JSIypYfX7JMCmwQCSLM/oQ5zct
+tsY7tGzCRBA7UVmW8uCDDZGmmzYIGQ7h1vcabgOFQ8wsteMHW3F0tU1K6oQut71x
+5KowA/9LeDjhl3tKizJn5hKf+NR8kTMcFFVMk8tf9/ZdqCG2gVTuB0EFimH47j1+
+YFWftvKg2IwF0qRnYuhpXn3kAtkzSwDr2T4r5CpDjttq+oBwhJ+N6lcPRoU26ijr
+nQ61Ek0jFFE5vfU7UODSLYXYbjf8McM6BtksY1SWfFBU5cVzgrkBDQRKKNwWEAQA
+kgYFtWA3U7vddU+gaVl2o932flA6MjL1wXqHkYFcRQPLdP6JWHVqTo6qfWDdZ3S/
+ZeBDjSApZ7/w7cwWFaQlssQ0qEbJz10silcO31Ygp9Xc81tuUj8WYRgWp4kM1lR9
+p/8XcvcvDRnZgTV/QqvcnrjG7EkAJSMDNeSywSpVRDsAAwYD/1N9ryskPTpqkXe7
+bap3sM1qjpSVR6hEh2W4Kkd9lDXScQNOcXPnA3McGVkMOhqR61RnkhjvaFEoxwsx
+ZEjkxqS1Bv1e8WnOGIamWwUafMIEj30CpOzHLebjkB1XFtxXLYt96H2DNL5mcvqb
+j1d/uZC6pAlq0heZbKmV+3JZzdcNiEkEGBECAAkFAkoo3BYCGwwACgkQBWrKdNRg
+AL+qdACgj/xAy648au+K8oNMKTa0DrTDnWAAn1uvM3JssKzUdig+2Nj3uc4TLS2b
+=pudC
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 34918B7D3969D2F5
+uid Brad Corso <bcorso@google.com>
+
+sub 5CE9BCD2ED28F793
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+QuOcn0ypycYY9I1Xl3Z/9D1jxT0Q
+=pU+S
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 79752DB6C966F0B8
+uid Rob Manning <robert.m.manning@gmail.com>
+
+sub AC9F6F1991913E30
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+1v9wlHhhdbE=
+=R3mQ
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub C9FBAA83A8753994
+uid Tatu Saloranta (cowtowncoder) <tatu.saloranta@iki.fi>
+
+sub AFF3E378166B1F0F
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFeWvEwBCAC7oSQ7XqcGDc6YL4KAGvDVZYigcJmv0y5hWT4wv9ABP4Jhzr1H
+NDmmGyWzhzTeMxwuZnc9vhxCQRwyxj3gGI5lYPEARswbi2fWk//78/3Wk+YMHJw3
+/1EO3VqvvDUt39gbaSqMCQNHctnFdb2QYZ7nRFTQeCqG/wyMdB05beqEnWEXzjeP
+FDF9y6gXkELn0lxUm2TKO8tU3h96TCuutDKJ0aE00lOeh/MbEaGHEbIU8kdfui6U
+znZ1X80EWbkCY8cKxEZHKD0aONSVHXwE6nETvFW9/9+K+sj/I7ytlyxwHsaQpi1H
+6aRGnq013VsIECrwkhmXBsLLXNjmhER+LkcDABEBAAG0NVRhdHUgU2Fsb3JhbnRh
+IChjb3d0b3duY29kZXIpIDx0YXR1LnNhbG9yYW50YUBpa2kuZmk+iQE+BBMBAgAo
+BQJXlrxMAhsDBQkHhM4ABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRDJ+6qD
+qHU5lFtxB/0QBiKaHHdFu3GOs21+S4LZYmO0bvHASg7ueeWtoE/1cEsKqvES03Tw
+iSfMabaPt+UL4qP9w6/SUtTITAmxuc1ksyU+HwC/R1QuF+vdsguFZ0/8VdVRVY5I
+5/6Dcp7kI49RO0LxGPXCMn8s3Nj0KXiCoodMDLHwwMv5OXWrQQ4yXiQTsJudBxy5
+o2yfp0AlLm4uZdDLj7Z4u4DfyKOuKIUMsMQ2Hk12gSkDaZViIURH6MaSEdC+XbDU
+cPTq27+JSdjfYEX0908P/bH36H2kPCGVh+sXpICZ/Ce7m0OHBfE/pTTCuOlAJvcL
+Y4QbyMTlyPpZ0zFgO+jX+fj8UFi2sRhquQENBFeWvEwBCADfbjqRN1GvSf9VkjDD
+WBqX3hILiPx3DKPiSFmSsAoiLSEkP8gRDBDy6po/Oez9q+bgb9Sk+iGifJvbVNZr
+7+88LSxQECsrVL+ZgTAZ2LkqABQJ8XYh/dTO6BMJ5rSLH/YN6bO9V4NjYod67W5u
+Yox+aCp6keE7ia7eBHck2wyqxikCqvVzmAduPCkkNSRuOwLkOguduXfwb7Cg1Rna
+cMMEfDd9t+a6ytY/8JFu01G++VVxFHO3vs//RINrm0O4xKPkT1+Ocd4+h3DlhhRv
+RXvI+MKeM0ud0OpUVCBKCZqbFKTVgoRpsKC925ZRUSqbmyBcIkqyYjzD1adaZdkq
+4PLFABEBAAGJASUEGAECAA8FAleWvEwCGwwFCQeEzgAACgkQyfuqg6h1OZQ6swf/
+Vm0ndBcvdK0qCoubR/WOsynS1wdQ2rGKJC5oVsUN4YVCZhg9OMhwMSO3EOBPdxtq
+4A8bSZp/8ZWmHLohE8QHD8AgaQBtRZyNkvMRiN157XGkPEBRWdHw6XAvx/lE31W+
+19qFRnAE8BbERE3gieJcG4CKWy5CyzXnjSM+znZvDQ8J7MfG+LxKbr7zUHQH9ZWs
+k8V9D+GXDgpuyZc4ct1tNDLcn6784FubcdrD3RLMiOAYSSgKSgoELRzB8zZds+WK
+FuiAYXZSdzCbjJJ2VqnJnQtYHN7Z5r3ySqbG7w3rRen+Ett6PX9Hrvc1MTy/UUdb
+3s08C0wD0x+ZzFzqUXKTZg==
+=nsI4
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 99CE9D9F22DC5C99
+sub 6C907406A9482E08
+sub B2581403B6FA2318
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+WjXlAJ0Tp3W/Ij5GUere1wynm2Ol+6Tv4Q==
+=Mpf9
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub B7C3B43D18EAA8B7
+uid Karl Heinz Marbaise (SoftwareEntwicklung Beratung Schulung) <kama@soebes.de>
+
+sub 02A4A6FB70018AD9
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+=M8yH
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub E16AB52D79FD224F
+sub 5A34A5E06B936F93
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFF/4bYBCADTeOLZiVGNbjlPrwG7UcMl+yXmEqpf9dB1A9cuicH3PWXj0WOb
+LSzHjzoRvRekEqSUmgoveey1lPuA2qjOUkXY6Kiyx+oLiG0/ObJHUQW2O+tjSQ0R
+ZXKd4ftaw65SLbwYO2JHzj5fLC9j2mZQiRjGs1bWM58c/dOKp1XaOc1/ffcl3L3q
+Up64jWH9r3yhPemh5SHo47UxNvItdaJJYnt20azpZj9oq1ebUuQFMaQDc/RTALhf
+Xb4BWO+z2PCmChz60i/Ko2ZKPJV2TqPqWO+aklgxTTwZZ0IvgFm/5n3Dtn5p5iGf
+qwKkHPJIDWc8cWYtxC608LFdqiAlYmp/oPi5ABEBAAG5AQ0EUX/htgEIALToF36j
+45OitNd4k17BSZJKnuS3uIL3tTw0fRqLv0/3EBaj4zD5Qc5YTKFgM66Bb5ybI63c
+wYhfSBHP2ZRS7oNdDbPd/30jDKNvmcDjIhGLT7bZJwC9SJVifHuvtzr6wBR8xoIt
+yYva5D3ax8ZvnzqIbMPeHou+0ZnRYSPjy2c2TxAJTjDOG461h9mVXDdK74wL8kQs
+IxqqYRIeEdmrXMrd/B8IPwuIv8w7LwzadNgRnXaJ5Q5bnMvvhVLnWKRt5aiQVBxc
+67FTujjqFF4Y/1UJb311K+1LSqNrTT7As8nhf2Gu/Gb47kw1bb7wBdKv2Swx5mYq
+iW5+ARQU7jCiUVkAEQEAAYkBHwQYAQIACQUCUX/htgIbDAAKCRDharUtef0iT2Sy
+CADAznSkG/8EdIU5UQhp/lY9h3WLzYI7aARw0IA6O4ijGLwcytO7TaWjEzUCMZdw
+01vAjVH1xNn9QvTgQV+2GyqyBNsjmgGt5/tK/+JtMgXUwr8+KsBf3908rOqAAZ3Y
+GyM9N8sRsyfPB/PHfv289sL2IKPxiFTGI0NGS3qOAKQ5TZvV7OPsP5+yHfeJG/Xh
+CW8p+nkMGpH4rE8Z6NKgLe/WC6J36aQ4kBfYneueH90Dc400rfGyL+0Gn1Rzuj2K
+FuUFK6q/GBlFaNo0azCqtdpcO6C3GpJYtISxpQ1Rp9kSEzSCL3tOli8Xs6gsruc+
+vCSIy8lzRw19ZO9G7qhjcHLc
+=vO0K
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub E16AB52D79FD224F
+sub 5A34A5E06B936F93
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFF/4bYBCADTeOLZiVGNbjlPrwG7UcMl+yXmEqpf9dB1A9cuicH3PWXj0WOb
+LSzHjzoRvRekEqSUmgoveey1lPuA2qjOUkXY6Kiyx+oLiG0/ObJHUQW2O+tjSQ0R
+ZXKd4ftaw65SLbwYO2JHzj5fLC9j2mZQiRjGs1bWM58c/dOKp1XaOc1/ffcl3L3q
+Up64jWH9r3yhPemh5SHo47UxNvItdaJJYnt20azpZj9oq1ebUuQFMaQDc/RTALhf
+Xb4BWO+z2PCmChz60i/Ko2ZKPJV2TqPqWO+aklgxTTwZZ0IvgFm/5n3Dtn5p5iGf
+qwKkHPJIDWc8cWYtxC608LFdqiAlYmp/oPi5ABEBAAG5AQ0EUX/htgEIALToF36j
+45OitNd4k17BSZJKnuS3uIL3tTw0fRqLv0/3EBaj4zD5Qc5YTKFgM66Bb5ybI63c
+wYhfSBHP2ZRS7oNdDbPd/30jDKNvmcDjIhGLT7bZJwC9SJVifHuvtzr6wBR8xoIt
+yYva5D3ax8ZvnzqIbMPeHou+0ZnRYSPjy2c2TxAJTjDOG461h9mVXDdK74wL8kQs
+IxqqYRIeEdmrXMrd/B8IPwuIv8w7LwzadNgRnXaJ5Q5bnMvvhVLnWKRt5aiQVBxc
+67FTujjqFF4Y/1UJb311K+1LSqNrTT7As8nhf2Gu/Gb47kw1bb7wBdKv2Swx5mYq
+iW5+ARQU7jCiUVkAEQEAAYkBHwQYAQIACQUCUX/htgIbDAAKCRDharUtef0iT2Sy
+CADAznSkG/8EdIU5UQhp/lY9h3WLzYI7aARw0IA6O4ijGLwcytO7TaWjEzUCMZdw
+01vAjVH1xNn9QvTgQV+2GyqyBNsjmgGt5/tK/+JtMgXUwr8+KsBf3908rOqAAZ3Y
+GyM9N8sRsyfPB/PHfv289sL2IKPxiFTGI0NGS3qOAKQ5TZvV7OPsP5+yHfeJG/Xh
+CW8p+nkMGpH4rE8Z6NKgLe/WC6J36aQ4kBfYneueH90Dc400rfGyL+0Gn1Rzuj2K
+FuUFK6q/GBlFaNo0azCqtdpcO6C3GpJYtISxpQ1Rp9kSEzSCL3tOli8Xs6gsruc+
+vCSIy8lzRw19ZO9G7qhjcHLc
+=vO0K
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub FD5DEA07FCB690A8
+uid Baptiste Mathus (Baptiste <batmat> Mathus @ CloudBees) <bmathus@cloudbees.com>
+uid Baptiste Mathus (CloudBees alias for Baptiste <batmat> Mathus' account for infra access) <bmathus@cloudbees.com>
+uid Baptiste Mathus <baptiste@codehaus.org>
+
+sub 5F68B9B2F1725F16
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFFCLwoBCADxtcGi0nfolr1kGWe3jQ7n18roJFwBs4Q52nx0h4+a8ZGr7/1E
+1brakrz3t/cTSZIrhfru8kirP8cJtXBxpd/nCeRrB/4ZtXPUJiGwKx6sVGr0ix6U
+eZKQb3anH3jdGTzZ2csqt6Ro85SvIHfqAREcPOoQk7Kz3DFOGbSfECN2Wf1pTnRT
+jdF1Z5DkoTd8sGBmGOdhNMzgqMTHz6np6M2B/JVP5DpcKPbbMhQ75RPcxNEb4QSa
+HtCL+gMZiF7fndWx2Tjbpanbb5+TomfWOMizpkyziyYeUmGoyggrnXQ4BMlzsIuK
+ATz6wA5j4qfRLfoDDgNv5UacVAtWL+rlTP8NABEBAAG0TkJhcHRpc3RlIE1hdGh1
+cyAoQmFwdGlzdGUgPGJhdG1hdD4gTWF0aHVzIEAgQ2xvdWRCZWVzKSA8Ym1hdGh1
+c0BjbG91ZGJlZXMuY29tPokBOAQTAQIAIgUCV81wjAIbAwYLCQgHAwIGFQgCCQoL
+BBYCAwECHgECF4AACgkQ/V3qB/y2kKhonAf+Lcl9bj90OOyUANRNkZnuq2sLI+KD
+kerGmbwG7FJCM/Hvq6MgtNaXt98RfU7a1aBmmM6uTOBFko+7o8QXocnU/2TrlsnU
+yMHsFfO7OQSQJebSSyAyE1vy5VYzblsqgfs7Zreb3BO/awzr0GZXjR+g/q6ivxhK
++2pIkdfuBBkConNzoPqSC1f/F4qZuCi1e/VM5LmincIUEnWUR/PXpgXOwu/KoyzX
+X8VC/Vwk73vGaeBN3avCMVzNUmyYXELzcimcaa70ISKReUJvoYqHEDyVcMk9Yzjn
+VosDTfun0kUcfs2nd0ZySyygn80JHsZURIzEAnliz56lE8Fq5i2MO9o0ErRwQmFw
+dGlzdGUgTWF0aHVzIChDbG91ZEJlZXMgYWxpYXMgZm9yIEJhcHRpc3RlIDxiYXRt
+YXQ+IE1hdGh1cycgYWNjb3VudCBmb3IgaW5mcmEgYWNjZXNzKSA8Ym1hdGh1c0Bj
+bG91ZGJlZXMuY29tPokBOAQTAQIAIgUCV81mXwIbAwYLCQgHAwIGFQgCCQoLBBYC
+AwECHgECF4AACgkQ/V3qB/y2kKjQQQf+K6NNaERzm+5dkPOdmrVQQPAXrUxGW6b5
+Bsx12mU4qJKxQsq9tKsw9kdkvlP7rVhJATBk4J3ZYGWSqQajnVcAxznlWZVksWqo
+rCtYAH2+rhlUBo7/mvDnCW+z0vfEwBS4vQM3Oo83CyOecSnn98wp+W1O+TdCZVAf
+k8UOrODdc55VpXoQTw4PZ2uGr/56EFNYNXia6O7H0FuyDM6g5ilFd5Wxpp7qS7D7
+zJkWciSGmOwcw4NeeAMAu0bv8X9vmom30EEoFa6o3GHUJz0/DsbaoAOxcVMIymY+
+SzQQ+XyaHpTeRdpWB2qQo6BHSktm+vxp54811qSwyqPp0uKjHmVFLbQnQmFwdGlz
+dGUgTWF0aHVzIDxiYXB0aXN0ZUBjb2RlaGF1cy5vcmc+iQE4BBMBAgAiBQJRQi8K
+AhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRD9XeoH/LaQqLyjB/9diBWw
+NMYG6UB3ijZYyUo0P3F49JcboW8U8vtGkDjZU8bSHkDQX/1mstMSTPoO63TrszRh
+UCn7lMxHfDaYVhbr6N622Jc10WhGiJICPGSz4azHdQA4e2tC2l2BCMnq7mvJ0bVx
+uqVb3VE5P2R884g3K8Jq3O3tjWTten5Z63UvqPcPmpN2C8WoI4EDWqxTAxyJs0GQ
+hNnfPDKycIpv7ESjprJ7c4oo/K0YUtlK5rF3eNorZSOrj6adsrdcf7IMvQxnI2Ro
+tFr49wqdvn3fTW7db+1qoXAvsHV7bHZPxc4OmOeCuqNOoh4J5ftROO8o0Gi/wC4B
+bniNzu7SndfMOTjXuQENBFFCLwoBCACaK5wadodZGLdBAAcRg9rwBzPy+F7ZXdwQ
+A1kHo0Z6xhQJP2/X3C/rEgKW59QhBLyEMBPELRtO5vTC5UYLu0pHK0XsOEacFVTW
+GQ+gLGp2UkScAJEgAQPYNNWrAz0MoAPQ//RW2Byph+WBVtgnP09nmq/WcXjv0tz7
+FrSFW/A0uADkcEdWGx6ItNiHRAZBgO4uzSY8GUw2YSEBjAilDwVs/Jftj5dlJlwI
+JzA0VzNIFunKwBTicMHSSHRNic+zlxMOs02a3XK3NBPv9a5DIffZuU9657rHmZM9
+zaS1PyHsMbpZsy+hFtxMFfVuViojg63ZC5eh9C/ghKCIbP0F+L9tABEBAAGJAR8E
+GAECAAkFAlFCLwoCGwwACgkQ/V3qB/y2kKgcqgf9EGoznHgOwfohcWsi6uIuLgsT
+ypd2f+zPAYpgySP8LK2+UZBnTzo6zxtWB0ZZAj8ICdciVOdcSYim/X29pRzygKYD
+JpHh7ZvvxeB9bxg7Gfd8Ml5Ycdf1x8L/Psi8kajbkMczrhClxhAR76Zqjpm6gvyi
+e+21f6qAnx9B+J5jQpN6p5uLg1Ac3dU+kY9MJLL8qy53yXxJHfcF+hMoAVZPajU2
+fzySiLttENnxXHIqJiYj/N53RJmcQdYLNjQNwfpq01DJy0k5nvXDGCZmgUB2T7w1
+sVIIF1w0sMxaEy8blxB+j25b3KhYYe9NiQvK+/gthDgWyhkHs2UALPQwIfd9ig==
+=YlII
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub FD5DEA07FCB690A8
+uid Baptiste Mathus (Baptiste <batmat> Mathus @ CloudBees) <bmathus@cloudbees.com>
+uid Baptiste Mathus (CloudBees alias for Baptiste <batmat> Mathus' account for infra access) <bmathus@cloudbees.com>
+uid Baptiste Mathus <baptiste@codehaus.org>
+
+sub 5F68B9B2F1725F16
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFFCLwoBCADxtcGi0nfolr1kGWe3jQ7n18roJFwBs4Q52nx0h4+a8ZGr7/1E
+1brakrz3t/cTSZIrhfru8kirP8cJtXBxpd/nCeRrB/4ZtXPUJiGwKx6sVGr0ix6U
+eZKQb3anH3jdGTzZ2csqt6Ro85SvIHfqAREcPOoQk7Kz3DFOGbSfECN2Wf1pTnRT
+jdF1Z5DkoTd8sGBmGOdhNMzgqMTHz6np6M2B/JVP5DpcKPbbMhQ75RPcxNEb4QSa
+HtCL+gMZiF7fndWx2Tjbpanbb5+TomfWOMizpkyziyYeUmGoyggrnXQ4BMlzsIuK
+ATz6wA5j4qfRLfoDDgNv5UacVAtWL+rlTP8NABEBAAG0TkJhcHRpc3RlIE1hdGh1
+cyAoQmFwdGlzdGUgPGJhdG1hdD4gTWF0aHVzIEAgQ2xvdWRCZWVzKSA8Ym1hdGh1
+c0BjbG91ZGJlZXMuY29tPokBOAQTAQIAIgUCV81wjAIbAwYLCQgHAwIGFQgCCQoL
+BBYCAwECHgECF4AACgkQ/V3qB/y2kKhonAf+Lcl9bj90OOyUANRNkZnuq2sLI+KD
+kerGmbwG7FJCM/Hvq6MgtNaXt98RfU7a1aBmmM6uTOBFko+7o8QXocnU/2TrlsnU
+yMHsFfO7OQSQJebSSyAyE1vy5VYzblsqgfs7Zreb3BO/awzr0GZXjR+g/q6ivxhK
++2pIkdfuBBkConNzoPqSC1f/F4qZuCi1e/VM5LmincIUEnWUR/PXpgXOwu/KoyzX
+X8VC/Vwk73vGaeBN3avCMVzNUmyYXELzcimcaa70ISKReUJvoYqHEDyVcMk9Yzjn
+VosDTfun0kUcfs2nd0ZySyygn80JHsZURIzEAnliz56lE8Fq5i2MO9o0ErRwQmFw
+dGlzdGUgTWF0aHVzIChDbG91ZEJlZXMgYWxpYXMgZm9yIEJhcHRpc3RlIDxiYXRt
+YXQ+IE1hdGh1cycgYWNjb3VudCBmb3IgaW5mcmEgYWNjZXNzKSA8Ym1hdGh1c0Bj
+bG91ZGJlZXMuY29tPokBOAQTAQIAIgUCV81mXwIbAwYLCQgHAwIGFQgCCQoLBBYC
+AwECHgECF4AACgkQ/V3qB/y2kKjQQQf+K6NNaERzm+5dkPOdmrVQQPAXrUxGW6b5
+Bsx12mU4qJKxQsq9tKsw9kdkvlP7rVhJATBk4J3ZYGWSqQajnVcAxznlWZVksWqo
+rCtYAH2+rhlUBo7/mvDnCW+z0vfEwBS4vQM3Oo83CyOecSnn98wp+W1O+TdCZVAf
+k8UOrODdc55VpXoQTw4PZ2uGr/56EFNYNXia6O7H0FuyDM6g5ilFd5Wxpp7qS7D7
+zJkWciSGmOwcw4NeeAMAu0bv8X9vmom30EEoFa6o3GHUJz0/DsbaoAOxcVMIymY+
+SzQQ+XyaHpTeRdpWB2qQo6BHSktm+vxp54811qSwyqPp0uKjHmVFLbQnQmFwdGlz
+dGUgTWF0aHVzIDxiYXB0aXN0ZUBjb2RlaGF1cy5vcmc+iQE4BBMBAgAiBQJRQi8K
+AhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRD9XeoH/LaQqLyjB/9diBWw
+NMYG6UB3ijZYyUo0P3F49JcboW8U8vtGkDjZU8bSHkDQX/1mstMSTPoO63TrszRh
+UCn7lMxHfDaYVhbr6N622Jc10WhGiJICPGSz4azHdQA4e2tC2l2BCMnq7mvJ0bVx
+uqVb3VE5P2R884g3K8Jq3O3tjWTten5Z63UvqPcPmpN2C8WoI4EDWqxTAxyJs0GQ
+hNnfPDKycIpv7ESjprJ7c4oo/K0YUtlK5rF3eNorZSOrj6adsrdcf7IMvQxnI2Ro
+tFr49wqdvn3fTW7db+1qoXAvsHV7bHZPxc4OmOeCuqNOoh4J5ftROO8o0Gi/wC4B
+bniNzu7SndfMOTjXuQENBFFCLwoBCACaK5wadodZGLdBAAcRg9rwBzPy+F7ZXdwQ
+A1kHo0Z6xhQJP2/X3C/rEgKW59QhBLyEMBPELRtO5vTC5UYLu0pHK0XsOEacFVTW
+GQ+gLGp2UkScAJEgAQPYNNWrAz0MoAPQ//RW2Byph+WBVtgnP09nmq/WcXjv0tz7
+FrSFW/A0uADkcEdWGx6ItNiHRAZBgO4uzSY8GUw2YSEBjAilDwVs/Jftj5dlJlwI
+JzA0VzNIFunKwBTicMHSSHRNic+zlxMOs02a3XK3NBPv9a5DIffZuU9657rHmZM9
+zaS1PyHsMbpZsy+hFtxMFfVuViojg63ZC5eh9C/ghKCIbP0F+L9tABEBAAGJAR8E
+GAECAAkFAlFCLwoCGwwACgkQ/V3qB/y2kKgcqgf9EGoznHgOwfohcWsi6uIuLgsT
+ypd2f+zPAYpgySP8LK2+UZBnTzo6zxtWB0ZZAj8ICdciVOdcSYim/X29pRzygKYD
+JpHh7ZvvxeB9bxg7Gfd8Ml5Ycdf1x8L/Psi8kajbkMczrhClxhAR76Zqjpm6gvyi
+e+21f6qAnx9B+J5jQpN6p5uLg1Ac3dU+kY9MJLL8qy53yXxJHfcF+hMoAVZPajU2
+fzySiLttENnxXHIqJiYj/N53RJmcQdYLNjQNwfpq01DJy0k5nvXDGCZmgUB2T7w1
+sVIIF1w0sMxaEy8blxB+j25b3KhYYe9NiQvK+/gthDgWyhkHs2UALPQwIfd9ig==
+=YlII
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 3AD93C3C677A106E
+uid Carl Mastrangelo <carl@carlmastrangelo.com>
+
+sub 9B2A1B698A113AAD
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQINBFzwo60BEACg1rgL5jUtKkFE5DiwqJwxzJyJDH00TBSN6ZT+nXh1UxgC9q2h
+olF9V+2+LV1Jcmnc946xzIMiWLG33QB0NKVCdU5jNuLahOcViQQjNfGXwNzYoNCR
+vK9pnLA7Qe4QA/P4LBgKJEgiOqhKkMFGs0erGZ9prlcUp5Q1gBodyR2y/W3UNneG
+XvbVxuFrR/hAEX6t14Gxel8BlLQkU24Ln/AIurkSQ//S1SkN2xcPj9EKuXAeKupZ
+filkIsf3vE7kmWl0whXpfPE/VbEU9odwhbrWkJVud1JyvQm0aJ4n17lZkFpkA97f
+KpwvwpbA2KU7giMi7hv4u2ybQxshTaeqhtPT+JbcamhITdPdXj5jC2IMSCzxroxT
+SXAjjZJJK2Be998HQlUMmrU6m5jFsV6qobSDaU7XTnc3T26CP5Q6JR54Yf2unMJU
+XL5MTO2v+oHQqi9GFG9cJqQhGnJTpKOrZFhWbNmWqnHXJeENg1Rwm4U/a+mFQZNU
+nTp+9wuXXDHKbhI7og2dTMkU1s64We57dDJ1glKy+Rpza8kCzmCbk/JbAOPK1d6a
+jalEn1hLlFsE80AB4DTffJj8JL7MEpxtJEPZ54bOMLs6qkPxJRpcs8e2EoPWPxWx
+ATGI8R01S3wRmIER2TBOqSHGHCsfgBzdiwwQMvbGUTGjIz9oORQkfAObmwARAQAB
+tCtDYXJsIE1hc3RyYW5nZWxvIDxjYXJsQGNhcmxtYXN0cmFuZ2Vsby5jb20+iQJO
+BBMBCgA4FiEExvfRyATIIfSa87/BOtk8PGd6EG4FAlzwo60CGwMFCwkIBwIGFQoJ
+CAsCBBYCAwECHgECF4AACgkQOtk8PGd6EG4LXw/+KyPhlMYqONm3o+rkTH2Et0Dv
+hYEB5e5y3L/BRIHBAc4v2FE04ybir5akrhD2rCfd29AchCsbUt7ICDSpmMThjwlZ
+IzprzFvKQDjj4JXaI1iprhoEGaHerVWpmT42XvuZN9h+L0UNGuyaGf9svXRdmYuT
+YCXgOxMNotBUv0i5Io/MChpIoCDBSOdKIjRQto7J8W3MbWBiqCFZTX5PTJO7swb1
+KDH4MaWOGJrPhDdqbBOI9UYUNOoPbj/7k3caSooHZf4RjFs2HMw5lewFxc+tXva/
+GfnucrjVViyfVmphgdN2ZDj54jiDylTypizdx2DpSUSBZURGFaWDu9Wv2si1tdgp
+ZyzW4uRp0okEFP0sfMO2fqqVgTcWlOIABzYzSIc6+e1HFaz8L+LumfxFPosjzQ7E
+zadeq5YDrnF/399JfU9LKZjYKeIN91kzQizxT5f+JddXreEtAzBnT6gzhynFRiuk
+dhdF2k5sa+uNs3GWZ00d10hgjUnxgzgbNZk1SWxxqfp+zBQZEmej38DZK/ksBisY
+TKTGnrlUuG2AiJZCmJfkGw/9H2AUSYlLJoFo3xRTV0GwOKFdB0hbSpvYJ+Li59OS
+QEmlNVCn34x69PjmB3BJ3A5PepgrN36jTFwHp6J28+MuKo8NcNE5fDIVmss6FkiB
+RE6tKkcMSc9I2LT/Z525Ag0EXPCjrQEQAM/Dx2zf80V8lH0HKmyEPyTnb/KnzbhZ
+cNCbsRYuKx9T2xxf9uBGVUPyDQF0TvLSxlXbjAk79jbEx7NnqmzTLhtwt//J6BdZ
+N0PXTcXywP0NSVP/zVwUObiuPrv6HeBokwWa521TvOczDmqU0vyJruzeTj4wrbbp
+Gs+8PDT/e0zBfoEUa61da4GtN98uZZDLWcuzoUbp5flaqte+Ok2Lo9St1uLoIzPR
+ot8rix4H4oZTmxg7SKXk75fwAXLPJSBDEBhoY3PGUBlTCHoPLpdbv6V/dqFJBZRK
+XbFiEcEAdXHFTOktm4qAtWAIGsvrtRgW/n54aW8TKomiSoyPQFM7WEIJ4eqNyhs1
+rbJms3lXOHt8D22QQkeUyNrPiv+mcmfXSnEq2adKJtaCZcXeXP2v8T4HnOXwqRPX
+H9pynkjx7csY/H6FIGiXoAj2DWTjfOF5gpkcCDNNYqiE7tmZiRFUYAXq0H1sUln/
+QSjlczOWqYrjBARuxaE5MLmi+8J9enOsDMEpuk849P2jjb90wepyaw7enQd4YHOv
+DPb981xPCqYkr8ld64HYaC7a9VnGdFswfE37ITt+JXsks4sULBdIQDRuImVitmDM
+HNRiJUp1Iu30AMomaGH8QN60rdPnjMpMB7vPxduAYB2u3Z4loL8Cr0TCDGPdT4mW
+iO78diZnPVYfABEBAAGJAjYEGAEKACAWIQTG99HIBMgh9Jrzv8E62Tw8Z3oQbgUC
+XPCjrQIbDAAKCRA62Tw8Z3oQbmC3D/4gq8E5MPG4WyNsS0WFzI2gPCHsLORyptDj
+wbdXSLzppuOLLChgVK718a0lH0yK8gQ9ife7yruc7plmTmGtL07L3xaADJW6dwA9
+dg0IxQlMG+cGK3XJTHRXhtRUPmZs3j/yUTzZefDgeTJg8fwKD08fpoagmn9+7WbZ
+0Ca6oV2eMfpnaTyYiE0zB3Fa1GPEl4sVuFgoNwdzv7mLNP141GpLEBQUz2gVd7gf
+AJXJN16rCdReHIEsTqVQwcru4f5d7oAisX83UXcShwRHg3gDU1WTnccv3YC0Qeqf
+BoJaiW7tKXD5grow3nNEBYOxFQfJmCEzhNJShlBm9kmUhr8MuIzzZhKu3AdY2Bfy
+Fm+hRzDh+K1V0e6rWdOXgUKnmXDrEDaqKwyRF2QdDupWaR38FhzHTzpYi6SlWbg+
+4LQQakakKrkaRa2Ahigd73D0DxpCLelKYaOx00+XVDDsYJpWEAPFqvv79axPaSmJ
+/Oe+4MNFU1CP5NVBDpo3BUHiKc8kC8X2xP11k73fXivU0Hi75RE0Whi4dJMlDt4l
+pBDOpFtM8GbBWp6lZs/yiu9fcF9qkQGvzj+TwEtKOVtrAVKJ1qSR45weWWJoUgHg
+HrCQSy8wuZWy7qY4iuo+aw+cSri3OLFdl57p1o5oECtehoLWkQ3yCsimkTIwFqqZ
+U/UZPX6m9g==
+=XXe6
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 3AD93C3C677A106E
+uid Carl Mastrangelo <carl@carlmastrangelo.com>
+
+sub 9B2A1B698A113AAD
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+U/UZPX6m9g==
+=XXe6
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 296CD27F60EED12C
+uid Charles Lee <ckl@google.com>
+
+sub D95ECEC170500D9F
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+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
+pbySzrh5PAD5/2W6CzkFMpH6a6E=
+=sgH/
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 571A5291E827E1C7
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGiBE9iFawRBACJb4OMk3zqMDNvSJKYZ8fGYrPq7yCcf/ykKDkGb2dtPnAZGkSp
+3mmNlTsU6s9ARn7BtkhIuM5TdbLs+z+okX62h3F0WW3h+CpfIXyKSgl7uWbhZ5G8
+RSCCRr7A8m6y83npkTVDW6m2oFN2cjFwPLm/vxg1gu5pO+NCwz5iBRHdewCg1idO
+Gl6gBAZVNteCRMVnGnX4EhMD/RaYBO2j511h7gR+p+6BBeJTEIA1+tsi+GhTBkS9
+mUMGuD9Z8PyvwL7quGQyXJ/kTe3eB6iyDFn0oemB1w736FQe3vcIX6eePOEiDZs5
+1Uepv7bXI4wn1i3Z3kzynXNKcjCd5ZxAmML5VlQ0zWeE0W18reCjt1P5q5xxBFjw
+0L8WA/9aPi4d5VPakzuDvxfKK29BogScTLn2C3fpEnqWsTfpoWSkNXkRsoB4jUU4
+oIqRFMTxwsjUmjVUPOG+YqoeAaVpj+RBpp+V+CqgfNWpnH4caxzODE9f+6RYRCGm
+LSq/6OmgZg6t38M5XWVpvk7Ixygs6Vrd99VZyIQPJwSBM/pvAw==
+=dENk
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index d63300c..b07ec4d 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -6,6 +6,8 @@
<key-servers enabled="false"/>
<trusted-artifacts>
<trust group="^com.android($|([.].*))" regex="true"/>
+ <trust group="com.google.testing.platform"/>
+ <trust group="androidx.databinding"/>
<trust file=".*-javadoc[.]jar" regex="true"/>
<trust file=".*-sources[.]jar" regex="true"/>
</trusted-artifacts>
@@ -18,6 +20,7 @@
<trusting group="com.sun.xml.bind.mvn"/>
<trusting group="org.jvnet.staxex"/>
</trusted-key>
+ <trusted-key id="056aca74d46000bf" group="io.netty"/>
<trusted-key id="0785b3eff60b1b1bea94e0bb7c25280eae63ebe5" group="org.apache.httpcomponents"/>
<trusted-key id="08f0aab4d0c1a4bdde340765b341ddb020fcb6ab" group="org.bouncycastle"/>
<trusted-key id="0cc641c3a62453ab390066c4a41f13c999945293" group="commons-logging"/>
@@ -25,10 +28,13 @@
<trusted-key id="190d5a957ff22273e601f7a7c92c5fec70161c62" group="org.apache"/>
<trusted-key id="19beab2d799c020f17c69126b16698a4adf4d638" group="org.checkerframework"/>
<trusted-key id="1fa37fbe4453c1073e7ef61d6449005f96bc97a3" group="de.undercouch"/>
+ <trusted-key id="280d66a55f5316c5" group="org.bitbucket.b_c"/>
+ <trusted-key id="296cd27f60eed12c" group="com.google.crypto.tink"/>
<trusted-key id="2bcbdd0f23ea1cafcc11d4860374cf2e8dd1bdfd">
<trusting group="org.codehaus"/>
<trusting group="net.java"/>
</trusted-key>
+ <trusted-key id="2c7b12f2a511e325" group="org.slf4j"/>
<trusted-key id="2db4f1ef0fa761ecc4ea935c86fdc7e2a11262cb">
<trusting group="commons-io"/>
<trusting group="commons-codec"/>
@@ -38,16 +44,29 @@
<trusted-key id="2e3a1affe42b5f53af19f780bcf4173966770193" group="org.jetbrains"/>
<trusted-key id="2e92113263fc31c74ccbaab20e91c2de43b72bb1" group="org.ec4j.core"/>
<trusted-key id="31fae244a81d64507b47182e1b2718089ce964b8" group="com.thoughtworks.qdox"/>
+ <trusted-key id="34918b7d3969d2f5" group="com.google.dagger"/>
+ <trusted-key id="3ad93c3c677a106e" group="io.perfmark"/>
<trusted-key id="3d11126ea77e4e07fbabb38614a84c976d265b25" group="com.google.protobuf"/>
<trusted-key id="3d5839a2262cbbfb" group="org.jetbrains.kotlinx"/>
+ <trusted-key id="3e3d777c909a447c" group="io.opencensus"/>
+ <trusted-key id="40a3c4432bd7308c" group="com.googlecode.juniversalchardet"/>
<trusted-key id="44fbdbbc1a00fe414f1c1873586654072ead6677" group="org.sonatype.oss"/>
<trusted-key id="476634a4694e716a" group="com.googlecode.java-diff-utils"/>
<trusted-key id="4db1a49729b053caf015cee9a6adfc93ef34893e" group="org.hamcrest"/>
- <trusted-key id="4f7e32d440ef90a83011a8fc6425559c47cc79c4" group="com.sun.activation"/>
+ <trusted-key id="4f7e32d440ef90a83011a8fc6425559c47cc79c4">
+ <trusting group="com.sun.activation"/>
+ <trusting group="javax.annotation"/>
+ </trusted-key>
<trusted-key id="517b94f8d0a46317a28d8ab30da8a5ec02d11ead" group="net.sf.jopt-simple"/>
<trusted-key id="51b52dc5dd452f92be342cc2858fc4c4f43856a3" group="xerces"/>
<trusted-key id="5208812e1e4a6db0" group="com.gradle"/>
<trusted-key id="55e770230e69cc6de143fb5b62c82e50836eb3ee" group="com.github.gundy"/>
+ <trusted-key id="571a5291e827e1c7" group="net.java"/>
+ <trusted-key id="5e1f79a7c298661e" group="com.google.auto"/>
+ <trusted-key id="6214760097dc5cfad0175ac2c9fbaa83a8753994">
+ <trusting group="com.fasterxml.jackson.module"/>
+ <trusting group="com.fasterxml.jackson.dataformat"/>
+ </trusted-key>
<trusted-key id="694621a7227d8d5289699830abe9f3126bb741c1">
<trusting group="com.google.guava"/>
<trusting group="com.google.jimfs"/>
@@ -58,12 +77,17 @@
<trusting group="com.sun.activation"/>
<trusting group="jakarta.activation"/>
</trusted-key>
- <trusted-key id="6f538074ccebf35f28af9b066a0975f8b1127b83" group="org.jetbrains.kotlin"/>
+ <trusted-key id="6f538074ccebf35f28af9b066a0975f8b1127b83">
+ <trusting group="org.jetbrains.kotlin"/>
+ <trusting group="org.jetbrains.kotlin.jvm"/>
+ </trusted-key>
<trusted-key id="7615ad56144df2376f49d98b1669c4bb543e0445" group="com.google.errorprone"/>
<trusted-key id="7616eb882daf57a11477aaf559a252fb1199d873" group="com.google.code.findbugs"/>
+ <trusted-key id="79752db6c966f0b8" group="com.google.android"/>
<trusted-key id="7999befba1039e8b" group="net.bytebuddy"/>
<trusted-key id="7c7d8456294423ba" group="org.objenesis"/>
<trusted-key id="7faa0f2206de228f0db01ad741321490758aad6f" group="org.codehaus.groovy"/>
+ <trusted-key id="7fe9900f412d622e" group="com.google.flatbuffers"/>
<trusted-key id="8254180bfc943b816e0b5e2e5e2f2b3d474efe6b" group="it.unimi.dsi"/>
<trusted-key id="8756c4f765c9ac3cb6b85d62379ce192d401ab61">
<trusting group="org.jetbrains.intellij.deps"/>
@@ -71,7 +95,10 @@
<trusting group="com.github.javaparser"/>
<trusting group="info.picocli"/>
</trusted-key>
+ <trusted-key id="8671a8df71296252" group="com.squareup"/>
<trusted-key id="90ee19787a7bcf6fd37a1e9180c08b1c29100955" group="com.squareup"/>
+ <trusted-key id="912d2c0eccda55c0" group="com.google.errorprone"/>
+ <trusted-key id="99ce9d9f22dc5c99" group="org.json"/>
<trusted-key id="9a259c7ee636c5ed" group="com.google.errorprone"/>
<trusted-key id="a1b4460d8ba7b9af" group="org.mockito"/>
<trusted-key id="a5bd02b93e7a40482eb1d66a5f69ad087600b22c" group="org.ow2.asm"/>
@@ -83,29 +110,51 @@
<trusted-key id="afcc4c7594d09e2182c60e0f7a01b0f236e5430f" group="com.google.code.gson"/>
<trusted-key id="b0f3710fa64900e7" group="com.google.auto.value"/>
<trusted-key id="b6e73d84ea4fcc47166087253faad2cd5ecbb314" group="org.apache.commons"/>
+ <trusted-key id="b7c3b43d18eaa8b7" group="org.codehouse.mojo"/>
<trusted-key id="b801e2f8ef035068ec1139cc29579f18fa8fd93b" group="com.google.j2objc"/>
<trusted-key id="bac30622339994c4" group="com.google.truth"/>
<trusted-key id="bdb5fa4fe719d787fb3d3197f6d4a1d411e9d1ae" group="com.google.guava"/>
+ <trusted-key id="c1b12a5d99c0729d" group="org.jetbrains"/>
<trusted-key id="c51e6cbc7ff46f0b" group="com.google.auto"/>
<trusted-key id="c70b844f002f21f6d2b9c87522e44ac0622b91c3" group="com.beust"/>
+ <trusted-key id="c727d053c4481cf5" group="org.tensorflow"/>
+ <trusted-key id="c7be5bcc9fec15518cfda882b0f3710fa64900e7" group="com.google.code.gson"/>
<trusted-key id="c7cb325467893cc4" group="junit"/>
+ <trusted-key id="c9fbaa83a8753994">
+ <trusting group="com.fasterxml.jackson.core"/>
+ <trusting group="com.fasterxml.jackson"/>
+ <trusting group="com.fasterxml"/>
+ <trusting group="org.codehaus.woodstox"/>
+ <trusting group="com.fasterxml.woodstox"/>
+ </trusted-key>
<trusted-key id="ce8075a251547bee249bc151a2115ae15f6b8b72">
<trusting group="org.apache.ant"/>
<trusting group="org.apache.commons"/>
</trusted-key>
<trusted-key id="d041cad2e452550f" group="com.google.protobuf"/>
+ <trusted-key id="d433f9c895710db8ab087fa6b7c3b43d18eaa8b7" group="org.codehaus.mojo"/>
+ <trusted-key id="d57506cd188fd842" group="com.google.api.grpc"/>
<trusted-key id="d6f1bc78607808ec8e9f69437a8860944fad5f62" group="org.apache.commons"/>
+ <trusted-key id="d89d05374952262b" group="org.jetbrains.dokka"/>
+ <trusted-key id="d9c565aa72ba2fdd" group="io.grpc"/>
<trusted-key id="da7a1bb85b19e4fb05073431205c8673dc742c7c" group="org.apache"/>
<trusted-key id="dcba03381ef6c89096acd985ac5ec74981f9cda6" group="org.testng"/>
<trusted-key id="dddafa7674e54418" group="org.testng"/>
<trusted-key id="e0130a3ed5a2079e" group="org.webjars"/>
+ <trusted-key id="e16ab52d79fd224f" group="com.google.api.grpc"/>
+ <trusted-key id="e93671c7272b7b3f" group="org.jdom"/>
<trusted-key id="ea23db1360d9029481e7f2efecdfea3cb4493b94" group="jline"/>
<trusted-key id="ee9e7dc9d92fc896" group="com.google.errorprone"/>
<trusted-key id="efe8086f9e93774e" group="junit"/>
- <trusted-key id="f254b35617dc255d9344bcfa873a8e86b4372146" group="org.apache"/>
+ <trusted-key id="f254b35617dc255d9344bcfa873a8e86b4372146">
+ <trusting group="org.apache"/>
+ <trusting group="org.codehaus.mojo"/>
+ </trusted-key>
+ <trusted-key id="f42e87f9665015c9" group="org.jsoup"/>
<trusted-key id="fa77dcfef2ee6eb2debedd2c012579464d01c06a" group="org.apache"/>
<trusted-key id="fa7929f83ad44c4590f6cc6815c71c0a4e0b8edd" group="net.java.dev.jna"/>
<trusted-key id="fc411cd3cb7dcb0abc9801058118b3bcdb1a5000" group="jakarta.xml.bind"/>
+ <trusted-key id="fd5dea07fcb690a8" group="org.codehaus.mojo"/>
<trusted-key id="ff6e2c001948c5f2f38b0cc385911f425ec61b51">
<trusting group="junit"/>
<trusting group="org.junit"/>
@@ -124,14 +173,6 @@
<sha256 value="47a89be0fa0fedd476db5fd2c83487654d2a119c391f83a142be876667cf7dab" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="de.undercouch" name="gradle-download-task" version="4.1.1">
- <artifact name="gradle-download-task-4.1.1.pom">
- <ignored-keys>
- <ignored-key id="1fa37fbe4453c1073e7ef61d6449005f96bc97a3" reason="PGP verification failed"/>
- </ignored-keys>
- <sha256 value="85e6607260dbbdb5e85f1988840b0d9ac4be9119dde90a1baca8ea775646415a" origin="Generated by Gradle"/>
- </artifact>
- </component>
<component group="javax.inject" name="javax.inject" version="1">
<artifact name="javax.inject-1.jar">
<sha256 value="91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff" origin="Generated by Gradle"/>
@@ -156,57 +197,15 @@
<sha256 value="310a6aa2d90534c32b8f46f1fc98cd0edae95dcdfca23e2847e5efa9ae0c019a" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="org.jetbrains.kotlin.jvm" name="org.jetbrains.kotlin.jvm.gradle.plugin" version="1.6.20">
- <artifact name="org.jetbrains.kotlin.jvm.gradle.plugin-1.6.20.pom">
- <sha256 value="eb30990a12cace57fd1e2c0484fe482e0cdb9ba680e4b15996d9324495638903" origin="Generated by Gradle"/>
- </artifact>
- </component>
- <component group="org.mockito" name="mockito-core" version="3.4.6">
- <artifact name="mockito-core-3.4.6.jar">
- <sha256 value="1977fb3356258862b8373702de8818fb549f409298b9d4fe8339973879a89ea1" origin="Generated by Gradle"/>
- </artifact>
- <artifact name="mockito-core-3.4.6.pom">
- <sha256 value="f0a883f76a8b484009119fab1319d9a96e1d76ee672cb979c2af5944d54597d3" origin="Generated by Gradle"/>
- </artifact>
- </component>
<component group="org.ow2" name="ow2" version="1.5">
<artifact name="ow2-1.5.pom">
<sha256 value="0f8a1b116e760b8fe6389c51b84e4b07a70fc11082d4f936e453b583dd50b43b" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="org.ow2.asm" name="asm-analysis" version="7.0">
- <artifact name="asm-analysis-7.0.jar">
- <sha256 value="e981f8f650c4d900bb033650b18e122fa6b161eadd5f88978d08751f72ee8474" origin="Generated by Gradle"/>
- </artifact>
- <artifact name="asm-analysis-7.0.pom">
- <sha256 value="c6b54477e9d5bae1e7addff2e24cbf92aaff2ff08fd6bc0596c3933c3fadc2cb" origin="Generated by Gradle"/>
- </artifact>
- </component>
- <component group="org.ow2.asm" name="asm-commons" version="7.0">
- <artifact name="asm-commons-7.0.jar">
- <sha256 value="fed348ef05958e3e846a3ac074a12af5f7936ef3d21ce44a62c4fa08a771927d" origin="Generated by Gradle"/>
- </artifact>
- <artifact name="asm-commons-7.0.pom">
- <sha256 value="f4c697886cdb4a5b2472054a0b5e34371e9b48e620be40c3ed48e1f4b6d51eb4" origin="Generated by Gradle"/>
- </artifact>
- </component>
- <component group="org.ow2.asm" name="asm-util" version="7.0">
- <artifact name="asm-util-7.0.jar">
- <sha256 value="75fbbca440ef463f41c2b0ab1a80abe67e910ac486da60a7863cbcb5bae7e145" origin="Generated by Gradle"/>
- </artifact>
- <artifact name="asm-util-7.0.pom">
- <sha256 value="e07bce4bb55d5a06f4c10d912fc9dee8a9b9c04ec549bbb8db4f20db34706f75" origin="Generated by Gradle"/>
- </artifact>
- </component>
<component group="org.sonatype.oss" name="oss-parent" version="7">
<artifact name="oss-parent-7.pom">
<sha256 value="b51f8867c92b6a722499557fc3a1fdea77bdf9ef574722fe90ce436a29559454" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="com.gradle" name="gradle-enterprise-gradle-plugin" version="3.6.3">
- <artifact name="gradle-enterprise-gradle-plugin-3.6.3.pom">
- <sha256 value="792024ac9c73fb240d1f0e1183adceca3527b97cc4e808fcea09e1b232d0acb7" origin="Generated by Gradle"/>
- </artifact>
- </component>
</components>
</verification-metadata>
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index a49e9c4..8b263cb 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -4,4 +4,4 @@
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
diff --git a/settings.gradle.kts b/settings.gradle.kts
index be5fbb7..dd45a4d 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -3,6 +3,7 @@
// Prefer mavenCentral as that has signed artifacts
mavenCentral()
gradlePluginPortal()
+ google()
}
}
diff --git a/src/main/java/com/android/resources/ResourceType.java b/src/main/java/com/android/resources/ResourceType.java
index a6943a5..32b0eda 100644
--- a/src/main/java/com/android/resources/ResourceType.java
+++ b/src/main/java/com/android/resources/ResourceType.java
@@ -78,6 +78,13 @@
AAPT("_aapt", "Aapt Attribute", Kind.SYNTHETIC),
/**
+ * This tag is used for marking a resource overlayable, i.e. that it can be overlaid at runtime
+ * by RROs (Runtime Resource Overlays). This is a new feature supported starting Android 10.
+ * This tag (and the content following it in that node) does not define a resource.
+ */
+ OVERLAYABLE("overlayable", "Overlayable tag", Kind.SYNTHETIC),
+
+ /**
* Represents item tags inside a style definition.
*/
STYLE_ITEM("item", "Style Item", Kind.SYNTHETIC),
@@ -87,6 +94,13 @@
* namespace
*/
SAMPLE_DATA("sample", "Sample data", Kind.SYNTHETIC),
+
+ /**
+ * Not a real resource, but a way of defining a resource reference that will be replaced with
+ * its actual value during linking. Does not exist at runtime, nor does it appear in the R
+ * class. Only present in raw and flat resources.
+ */
+ MACRO("macro", "Macro resource replacement", Kind.SYNTHETIC),
;
private enum Kind {
@@ -144,6 +158,8 @@
ImmutableMap.Builder<String, ResourceType> tagNames = ImmutableMap.builder();
tagNames.put(SdkConstants.TAG_DECLARE_STYLEABLE, STYLEABLE);
tagNames.put(SdkConstants.TAG_PUBLIC, PUBLIC);
+ tagNames.put(OVERLAYABLE.getName(), OVERLAYABLE);
+ tagNames.put(MACRO.getName(), MACRO);
ImmutableMap.Builder<String, ResourceType> classNames = ImmutableMap.builder();
classNames.put(STYLEABLE.mName, STYLEABLE);
@@ -229,6 +245,13 @@
return SAMPLE_DATA;
}
+ if (xmlValue.equals(OVERLAYABLE.mName)) {
+ return OVERLAYABLE;
+ }
+
+ if (xmlValue.equals(MACRO.mName)) {
+ return MACRO;
+ }
return CLASS_NAMES.get(xmlValue);
}
diff --git a/src/main/java/com/android/tools/metalava/AndroidApiChecks.kt b/src/main/java/com/android/tools/metalava/AndroidApiChecks.kt
index 74add34..901e7ec 100644
--- a/src/main/java/com/android/tools/metalava/AndroidApiChecks.kt
+++ b/src/main/java/com/android/tools/metalava/AndroidApiChecks.kt
@@ -16,7 +16,6 @@
package com.android.tools.metalava
-import com.android.SdkConstants
import com.android.tools.metalava.model.AnnotationAttributeValue
import com.android.tools.metalava.model.ClassItem
import com.android.tools.metalava.model.Codebase
@@ -265,9 +264,7 @@
for (annotation in item.modifiers.annotations()) {
val cls = annotation.resolve() ?: continue
val modifiers = cls.modifiers
- if (modifiers.findAnnotation(SdkConstants.INT_DEF_ANNOTATION.oldName()) != null ||
- modifiers.findAnnotation(SdkConstants.INT_DEF_ANNOTATION.newName()) != null
- ) {
+ if (modifiers.findAnnotation(ANDROIDX_INT_DEF) != null) {
// TODO: Check that all the constants listed in the documentation are included in the
// annotation?
foundTypeDef = true
diff --git a/src/main/java/com/android/tools/metalava/AnnotationsMerger.kt b/src/main/java/com/android/tools/metalava/AnnotationsMerger.kt
index 30ba4e9..0bbabef 100644
--- a/src/main/java/com/android/tools/metalava/AnnotationsMerger.kt
+++ b/src/main/java/com/android/tools/metalava/AnnotationsMerger.kt
@@ -24,10 +24,8 @@
import com.android.SdkConstants.DOT_XML
import com.android.SdkConstants.DOT_ZIP
import com.android.SdkConstants.GT_ENTITY
-import com.android.SdkConstants.INT_DEF_ANNOTATION
import com.android.SdkConstants.LT_ENTITY
import com.android.SdkConstants.QUOT_ENTITY
-import com.android.SdkConstants.STRING_DEF_ANNOTATION
import com.android.SdkConstants.TYPE_DEF_FLAG_ATTRIBUTE
import com.android.SdkConstants.TYPE_DEF_VALUE_ATTRIBUTE
import com.android.SdkConstants.VALUE_TRUE
@@ -668,17 +666,15 @@
codebase,
XmlBackedAnnotationItem(
codebase,
- if (valName == "stringValues") STRING_DEF_ANNOTATION.newName() else INT_DEF_ANNOTATION.newName(),
+ if (valName == "stringValues") ANDROIDX_STRING_DEF else ANDROIDX_INT_DEF,
attributes
)
)
}
- name == STRING_DEF_ANNOTATION.oldName() ||
- name == STRING_DEF_ANNOTATION.newName() ||
+ name == ANDROIDX_STRING_DEF ||
name == ANDROID_STRING_DEF ||
- name == INT_DEF_ANNOTATION.oldName() ||
- name == INT_DEF_ANNOTATION.newName() ||
+ name == ANDROIDX_INT_DEF ||
name == ANDROID_INT_DEF -> {
val attributes = mutableListOf<XmlBackedAnnotationAttribute>()
@@ -702,14 +698,12 @@
if (children.size == 2) {
parseChild(children[1])
}
- val intDef = INT_DEF_ANNOTATION.oldName() == name ||
- INT_DEF_ANNOTATION.newName() == name ||
- ANDROID_INT_DEF == name
+ val intDef = ANDROIDX_INT_DEF == name || ANDROID_INT_DEF == name
return PsiAnnotationItem.create(
codebase,
XmlBackedAnnotationItem(
codebase,
- if (intDef) INT_DEF_ANNOTATION.newName() else STRING_DEF_ANNOTATION.newName(), attributes
+ if (intDef) ANDROIDX_INT_DEF else ANDROIDX_STRING_DEF, attributes
)
)
}
diff --git a/src/main/java/com/android/tools/metalava/ApiLint.kt b/src/main/java/com/android/tools/metalava/ApiLint.kt
index 3d27d1e..c0df42f 100644
--- a/src/main/java/com/android/tools/metalava/ApiLint.kt
+++ b/src/main/java/com/android/tools/metalava/ApiLint.kt
@@ -32,9 +32,11 @@
import com.android.resources.ResourceType.INTEGER
import com.android.resources.ResourceType.INTERPOLATOR
import com.android.resources.ResourceType.LAYOUT
+import com.android.resources.ResourceType.MACRO
import com.android.resources.ResourceType.MENU
import com.android.resources.ResourceType.MIPMAP
import com.android.resources.ResourceType.NAVIGATION
+import com.android.resources.ResourceType.OVERLAYABLE
import com.android.resources.ResourceType.PLURALS
import com.android.resources.ResourceType.PUBLIC
import com.android.resources.ResourceType.RAW
@@ -1446,6 +1448,7 @@
private fun checkExceptions(method: MethodItem, filterReference: Predicate<Item>) {
for (exception in method.filteredThrowsTypes(filterReference)) {
+ if (method.isEnumSyntheticMethod()) continue
if (isUncheckedException(exception)) {
report(
BANNED_THROW, method,
@@ -2061,6 +2064,8 @@
STYLE_ITEM,
PUBLIC,
SAMPLE_DATA,
+ OVERLAYABLE,
+ MACRO,
AAPT -> {
// no-op; these are resource "types" in XML but not present as R classes
// Listed here explicitly to force compiler error as new resource types
diff --git a/src/main/java/com/android/tools/metalava/Constants.kt b/src/main/java/com/android/tools/metalava/Constants.kt
index 943a21e..ee7f441 100644
--- a/src/main/java/com/android/tools/metalava/Constants.kt
+++ b/src/main/java/com/android/tools/metalava/Constants.kt
@@ -29,6 +29,9 @@
const val ANDROIDX_ANNOTATION_PREFIX = "androidx.annotation."
const val ANDROIDX_NONNULL = "androidx.annotation.NonNull"
const val ANDROIDX_NULLABLE = "androidx.annotation.Nullable"
+const val ANDROIDX_INT_DEF = "androidx.annotation.IntDef"
+const val ANDROIDX_LONG_DEF = "androidx.annotation.LongDef"
+const val ANDROIDX_STRING_DEF = "androidx.annotation.StringDef"
const val ANDROID_SYSTEM_API = "android.annotation.SystemApi"
const val ANDROID_REQUIRES_PERMISSION = "android.annotation.RequiresPermission"
const val ANDROID_DEPRECATED_FOR_SDK = "android.annotation.DeprecatedForSdk"
diff --git a/src/main/java/com/android/tools/metalava/model/AnnotationItem.kt b/src/main/java/com/android/tools/metalava/model/AnnotationItem.kt
index 4da5f97..9159224 100644
--- a/src/main/java/com/android/tools/metalava/model/AnnotationItem.kt
+++ b/src/main/java/com/android/tools/metalava/model/AnnotationItem.kt
@@ -18,15 +18,15 @@
import com.android.SdkConstants
import com.android.SdkConstants.ATTR_VALUE
-import com.android.SdkConstants.INT_DEF_ANNOTATION
-import com.android.SdkConstants.LONG_DEF_ANNOTATION
-import com.android.SdkConstants.STRING_DEF_ANNOTATION
import com.android.tools.lint.annotations.Extractor.ANDROID_INT_DEF
import com.android.tools.lint.annotations.Extractor.ANDROID_LONG_DEF
import com.android.tools.lint.annotations.Extractor.ANDROID_STRING_DEF
import com.android.tools.metalava.ANDROIDX_ANNOTATION_PREFIX
+import com.android.tools.metalava.ANDROIDX_INT_DEF
+import com.android.tools.metalava.ANDROIDX_LONG_DEF
import com.android.tools.metalava.ANDROIDX_NONNULL
import com.android.tools.metalava.ANDROIDX_NULLABLE
+import com.android.tools.metalava.ANDROIDX_STRING_DEF
import com.android.tools.metalava.ANDROID_NONNULL
import com.android.tools.metalava.ANDROID_NULLABLE
import com.android.tools.metalava.ApiPredicate
@@ -105,9 +105,9 @@
return false
}
return (
- INT_DEF_ANNOTATION.isEquals(name) ||
- STRING_DEF_ANNOTATION.isEquals(name) ||
- LONG_DEF_ANNOTATION.isEquals(name) ||
+ ANDROIDX_INT_DEF == name ||
+ ANDROIDX_STRING_DEF == name ||
+ ANDROIDX_LONG_DEF == name ||
ANDROID_INT_DEF == name ||
ANDROID_STRING_DEF == name ||
ANDROID_LONG_DEF == name
@@ -160,7 +160,7 @@
}
}
- return AnnotationRetention.CLASS
+ return AnnotationRetention.getDefault()
}
companion object {
diff --git a/src/main/java/com/android/tools/metalava/model/AnnotationRetention.kt b/src/main/java/com/android/tools/metalava/model/AnnotationRetention.kt
index 803bcf7..79a996a 100644
--- a/src/main/java/com/android/tools/metalava/model/AnnotationRetention.kt
+++ b/src/main/java/com/android/tools/metalava/model/AnnotationRetention.kt
@@ -20,5 +20,16 @@
enum class AnnotationRetention {
SOURCE,
CLASS,
- RUNTIME
+ RUNTIME;
+
+ companion object {
+ fun getDefault(classItem: ClassItem): AnnotationRetention {
+ return getDefault(classItem.isKotlin())
+ }
+
+ fun getDefault(isKotlin: Boolean = false): AnnotationRetention {
+ // Each language's default retention policy is different
+ return if (isKotlin) RUNTIME else CLASS
+ }
+ }
}
diff --git a/src/main/java/com/android/tools/metalava/model/ClassItem.kt b/src/main/java/com/android/tools/metalava/model/ClassItem.kt
index 073cf76..fa045f1 100644
--- a/src/main/java/com/android/tools/metalava/model/ClassItem.kt
+++ b/src/main/java/com/android/tools/metalava/model/ClassItem.kt
@@ -378,10 +378,10 @@
val value = annotation?.findAttribute(SdkConstants.ATTR_VALUE)
val source = value?.value?.toSource()
return when {
- source == null -> AnnotationRetention.CLASS // default
+ source == null -> AnnotationRetention.getDefault(cls)
source.contains("RUNTIME") -> AnnotationRetention.RUNTIME
source.contains("SOURCE") -> AnnotationRetention.SOURCE
- else -> AnnotationRetention.CLASS // default
+ else -> AnnotationRetention.getDefault(cls)
}
}
diff --git a/src/main/java/com/android/tools/metalava/model/psi/PsiClassItem.kt b/src/main/java/com/android/tools/metalava/model/psi/PsiClassItem.kt
index 1573c61..7b7ae9b 100644
--- a/src/main/java/com/android/tools/metalava/model/psi/PsiClassItem.kt
+++ b/src/main/java/com/android/tools/metalava/model/psi/PsiClassItem.kt
@@ -469,10 +469,20 @@
!hasExplicitRetention(modifiers, psiClass, isKotlin)
) {
// By policy, include explicit retention policy annotation if missing
+ val defaultRetentionPolicy = AnnotationRetention.getDefault(isKotlin)
modifiers.addAnnotation(
codebase.createAnnotation(
- "@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS)",
- item, false
+ buildString {
+ append('@')
+ append(java.lang.annotation.Retention::class.qualifiedName)
+ append('(')
+ append(java.lang.annotation.RetentionPolicy::class.qualifiedName)
+ append('.')
+ append(defaultRetentionPolicy.name)
+ append(')')
+ },
+ item,
+ false
)
)
}
diff --git a/src/main/java/com/android/tools/metalava/model/psi/PsiModifierItem.kt b/src/main/java/com/android/tools/metalava/model/psi/PsiModifierItem.kt
index a94e5ae..e845a50 100644
--- a/src/main/java/com/android/tools/metalava/model/psi/PsiModifierItem.kt
+++ b/src/main/java/com/android/tools/metalava/model/psi/PsiModifierItem.kt
@@ -35,7 +35,7 @@
import com.intellij.psi.impl.light.LightModifierList
import org.jetbrains.annotations.NotNull
import org.jetbrains.annotations.Nullable
-import org.jetbrains.kotlin.asJava.elements.KtLightModifierList
+import org.jetbrains.kotlin.asJava.elements.KtLightElement
import org.jetbrains.kotlin.asJava.elements.KtLightNullabilityAnnotation
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility
import org.jetbrains.kotlin.descriptors.EffectiveVisibility
@@ -128,11 +128,14 @@
// Look for special Kotlin keywords
var ktModifierList: KtModifierList? = null
val sourcePsi = (element as? UElement)?.sourcePsi
- if (modifierList is KtLightModifierList<*>) {
- ktModifierList = modifierList.kotlinOrigin
- } else if (modifierList is LightModifierList && element is UMethod) {
- if (sourcePsi is KtModifierListOwner) {
- ktModifierList = sourcePsi.modifierList
+ when (modifierList) {
+ is KtLightElement<*, *> -> {
+ ktModifierList = modifierList.kotlinOrigin as? KtModifierList
+ }
+ is LightModifierList -> {
+ if (element is UMethod && sourcePsi is KtModifierListOwner) {
+ ktModifierList = sourcePsi.modifierList
+ }
}
}
var visibilityFlags = when {
diff --git a/src/test/java/com/android/tools/metalava/ApiFileTest.kt b/src/test/java/com/android/tools/metalava/ApiFileTest.kt
index fe0a680..40e0ee7 100644
--- a/src/test/java/com/android/tools/metalava/ApiFileTest.kt
+++ b/src/test/java/com/android/tools/metalava/ApiFileTest.kt
@@ -166,9 +166,9 @@
str: String = "hello " + "world",
vararg args: String) { }
- fun method2(myInt: Int, myInt2: Int = (2*int) * SIZE) { }
+ fun method2(myInt: Int, myInt2: Int = (2*myInt) * SIZE) { }
- fun method3(str: String, myInt: Int, myInt2: Int = double(int) + str.length) { }
+ fun method3(str: String, myInt: Int, myInt2: Int = double(myInt) + str.length) { }
fun emptyLambda(sizeOf: () -> Unit = { }) {}
@@ -200,8 +200,8 @@
method public android.graphics.Bitmap? drawToBitmap(android.view.View, android.graphics.Bitmap.Config config = android.graphics.Bitmap.Config.ARGB_8888);
method public void emptyLambda(kotlin.jvm.functions.Function0<kotlin.Unit> sizeOf = {});
method public void method1(int myInt = 42, Integer? myInt2 = null, int myByte = 42, String str = "hello world", java.lang.String... args);
- method public void method2(int myInt, int myInt2 = (2 * int) * some.other.pkg.Constants.Misc.SIZE);
- method public void method3(String str, int myInt, int myInt2 = double(int) + str.length);
+ method public void method2(int myInt, int myInt2 = (2 * myInt) * some.other.pkg.Constants.Misc.SIZE);
+ method public void method3(String str, int myInt, int myInt2 = double(myInt) + str.length);
field public static final test.pkg.Foo.Companion Companion;
}
public static final class Foo.Companion {
@@ -951,6 +951,8 @@
method public test.pkg.Issue create(String id, String briefDescription, String explanation);
}
public enum Language {
+ method public static test.pkg.Language valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static test.pkg.Language[] values();
enum_constant public static final test.pkg.Language JAVA;
enum_constant public static final test.pkg.Language KOTLIN;
}
@@ -4267,9 +4269,9 @@
str: String = "hello " + "world",
vararg args: String) { }
- fun method2(myInt: Int, myInt2: Int = (2*int) * SIZE) { }
+ fun method2(myInt: Int, myInt2: Int = (2*myInt) * SIZE) { }
- fun method3(str: String, myInt: Int, myInt2: Int = double(int) + str.length) { }
+ fun method3(str: String, myInt: Int, myInt2: Int = double(myInt) + str.length) { }
fun emptyLambda(sizeOf: () -> Unit = { }) {}
diff --git a/src/test/java/com/android/tools/metalava/OptionsTest.kt b/src/test/java/com/android/tools/metalava/OptionsTest.kt
index 740a86c..47e437a 100644
--- a/src/test/java/com/android/tools/metalava/OptionsTest.kt
+++ b/src/test/java/com/android/tools/metalava/OptionsTest.kt
@@ -127,7 +127,7 @@
--java-source <level>
Sets the source level for Java source files; default is 1.8.
--kotlin-source <level>
- Sets the source level for Kotlin source files; default is 1.6.
+ Sets the source level for Kotlin source files; default is 1.7.
--sdk-home <dir>
If set, locate the `android.jar` file from the given Android SDK
--compile-sdk-version <api>
diff --git a/src/test/java/com/android/tools/metalava/model/psi/PsiTestUtils.kt b/src/test/java/com/android/tools/metalava/model/psi/PsiTestUtils.kt
index de17fc0..21e28cc 100644
--- a/src/test/java/com/android/tools/metalava/model/psi/PsiTestUtils.kt
+++ b/src/test/java/com/android/tools/metalava/model/psi/PsiTestUtils.kt
@@ -62,6 +62,7 @@
return parseSources(
sources = sources.map { it.createFile(directory) },
description = "Test Codebase",
+ sourcePath = listOf(directory),
)
}