You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ho...@apache.org on 2021/08/18 15:05:52 UTC

[lucene-solr] branch branch_8x updated: SOLR-15089: Allow backup/restoration to Amazon's S3 blobstore (#2554)

This is an automated email from the ASF dual-hosted git repository.

houston pushed a commit to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/branch_8x by this push:
     new aa9def4  SOLR-15089: Allow backup/restoration to Amazon's S3 blobstore (#2554)
aa9def4 is described below

commit aa9def440df23db2fd221fa4e5787fb2fd52831d
Author: Houston Putman <ho...@apache.org>
AuthorDate: Wed Aug 18 11:05:30 2021 -0400

    SOLR-15089: Allow backup/restoration to Amazon's S3 blobstore (#2554)
    
    See solr/contrib/s3-repository/README.md for more information.
    
    Co-authored-by: Andy Throgmorton <at...@users.noreply.github.com>
    Co-authored-by: Andy Throgmorton <at...@salesforce.com>
    Co-authored-by: Pierre Salagnac <ps...@salesforce.com>
---
 .../.idea/libraries/Solr_s3_repository_library.xml |  10 +
 .../libraries/Solr_s3_repository_test_library.xml  |  10 +
 dev-tools/idea/.idea/modules.xml                   |   1 +
 .../solr/contrib/s3-repository/s3-repository.iml   |  29 ++
 .../solr/contrib/s3-repository/pom.xml.template    |  48 ++
 lucene/common-build.xml                            |   7 +
 lucene/ivy-versions.properties                     |  86 +++-
 lucene/licenses/httpcore-4.4.13.jar.sha1           |   1 -
 lucene/licenses/httpcore-4.4.14.jar.sha1           |   1 +
 solr/CHANGES.txt                                   |   2 +
 solr/NOTICE.txt                                    |  14 +-
 .../org/apache/solr/gcs/GCSBackupRepository.java   |  31 +-
 .../solr/gcs/LocalStorageGCSBackupRepository.java  |   2 +-
 solr/contrib/s3-repository/README.md               |  59 +++
 solr/contrib/s3-repository/build.xml               |  37 ++
 solr/contrib/s3-repository/ivy.xml                 |  91 ++++
 .../org/apache/solr/s3/S3BackupRepository.java     | 401 +++++++++++++++
 .../apache/solr/s3/S3BackupRepositoryConfig.java   |  88 ++++
 .../src/java/org/apache/solr/s3/S3Exception.java   |  38 ++
 .../src/java/org/apache/solr/s3/S3IndexInput.java  | 125 +++++
 .../org/apache/solr/s3/S3NotFoundException.java    |  36 ++
 .../java/org/apache/solr/s3/S3OutputStream.java    | 263 ++++++++++
 .../java/org/apache/solr/s3/S3StorageClient.java   | 561 +++++++++++++++++++++
 .../src/java/org/apache/solr/s3/package-info.java  |  19 +
 solr/contrib/s3-repository/src/java/overview.html  |  26 +
 .../s3-repository/src/test-files/conf/schema.xml   |  29 ++
 .../src/test-files/conf/solrconfig.xml             |  51 ++
 .../s3-repository/src/test-files/log4j2.xml        |  69 +++
 .../org/apache/solr/s3/AbstractS3ClientTest.java   |  69 +++
 .../org/apache/solr/s3/S3BackupRepositoryTest.java | 347 +++++++++++++
 .../apache/solr/s3/S3IncrementalBackupTest.java    | 113 +++++
 .../test/org/apache/solr/s3/S3IndexInputTest.java  | 130 +++++
 .../org/apache/solr/s3/S3OutputStreamTest.java     | 164 ++++++
 .../src/test/org/apache/solr/s3/S3PathsTest.java   | 185 +++++++
 .../test/org/apache/solr/s3/S3ReadWriteTest.java   | 105 ++++
 .../solr/cloud/api/collections/BackupCmd.java      |  21 +-
 .../cloud/api/collections/DeleteBackupCmd.java     |   4 +-
 .../solr/cloud/api/collections/RestoreCmd.java     |   6 +-
 .../apache/solr/core/backup/BackupFilePaths.java   |  12 +-
 .../org/apache/solr/core/backup/BackupManager.java |  28 +-
 .../core/backup/repository/BackupRepository.java   |  23 +
 .../apache/solr/handler/ReplicationHandler.java    |   4 +-
 .../java/org/apache/solr/handler/RestoreCore.java  |   2 +-
 .../java/org/apache/solr/handler/SnapShooter.java  |   4 +-
 .../apache/solr/handler/admin/BackupCoreOp.java    |   3 +-
 .../solr/handler/admin/CollectionsHandler.java     |  14 +-
 .../apache/solr/handler/admin/RestoreCoreOp.java   |   2 +-
 .../apache/solr/response/SmileResponseWriter.java  |   2 -
 .../collections/TestHdfsCloudBackupRestore.java    |   2 +-
 .../solr/handler/TestIncrementalCoreBackup.java    |   2 +-
 solr/licenses/HdrHistogram-2.1.12.jar.sha1         |   1 +
 solr/licenses/HdrHistogram-LICENSE-PD.txt          |   3 +
 solr/licenses/HdrHistogram-NOTICE.txt              |   1 +
 solr/licenses/LatencyUtils-2.0.3.jar.sha1          |   1 +
 solr/licenses/LatencyUtils-LICENSE-PD.txt          |   3 +
 solr/licenses/LatencyUtils-NOTICE.txt              |   1 +
 solr/licenses/annotations-2.16.93.jar.sha1         |   1 +
 solr/licenses/apache-client-2.16.93.jar.sha1       |   1 +
 solr/licenses/apache-client-LICENSE-ASL.txt        | 206 ++++++++
 solr/licenses/apache-client-NOTICE.txt             |  25 +
 solr/licenses/arns-2.16.93.jar.sha1                |   1 +
 solr/licenses/arns-LICENSE-ASL.txt                 | 206 ++++++++
 solr/licenses/arns-NOTICE.txt                      |  25 +
 solr/licenses/auth-2.16.93.jar.sha1                |   1 +
 solr/licenses/auth-LICENSE-ASL.txt                 | 206 ++++++++
 solr/licenses/auth-NOTICE.txt                      |  25 +
 solr/licenses/aws-core-2.16.93.jar.sha1            |   1 +
 solr/licenses/aws-core-LICENSE-ASL.txt             |  53 ++
 solr/licenses/aws-core-NOTICE.txt                  |  14 +
 solr/licenses/aws-java-sdk-core-1.12.42.jar.sha1   |   1 +
 solr/licenses/aws-java-sdk-core-LICENSE-ASL.txt    |  53 ++
 solr/licenses/aws-java-sdk-core-NOTICE.txt         |  14 +
 solr/licenses/aws-java-sdk-kms-1.12.42.jar.sha1    |   1 +
 solr/licenses/aws-java-sdk-kms-LICENSE-ASL.txt     |  53 ++
 solr/licenses/aws-java-sdk-kms-NOTICE.txt          |  14 +
 solr/licenses/aws-java-sdk-s3-1.12.42.jar.sha1     |   1 +
 solr/licenses/aws-java-sdk-s3-LICENSE-ASL.txt      |  53 ++
 solr/licenses/aws-java-sdk-s3-NOTICE.txt           |  14 +
 solr/licenses/aws-query-protocol-2.16.93.jar.sha1  |   1 +
 solr/licenses/aws-query-protocol-LICENSE-ASL.txt   |  53 ++
 solr/licenses/aws-query-protocol-NOTICE.txt        |  14 +
 solr/licenses/aws-xml-protocol-2.16.93.jar.sha1    |   1 +
 solr/licenses/aws-xml-protocol-LICENSE-ASL.txt     |  53 ++
 solr/licenses/aws-xml-protocol-NOTICE.txt          |  14 +
 solr/licenses/eventstream-1.0.1.jar.sha1           |   1 +
 solr/licenses/eventstream-LICENSE-ASL.txt          | 202 ++++++++
 solr/licenses/eventstream-NOTICE.txt               |   2 +
 solr/licenses/hamcrest-core-2.2.jar.sha1           |   1 +
 solr/licenses/http-client-spi-2.16.93.jar.sha1     |   1 +
 solr/licenses/http-client-spi-LICENSE-ASL.txt      | 206 ++++++++
 solr/licenses/http-client-spi-NOTICE.txt           |  25 +
 solr/licenses/httpcore-4.4.13.jar.sha1             |   1 -
 solr/licenses/httpcore-4.4.14.jar.sha1             |   1 +
 solr/licenses/ion-java-1.0.2.jar.sha1              |   1 +
 solr/licenses/ion-java-LICENSE-ASL.txt             | 176 +++++++
 solr/licenses/ion-java-NOTICE.txt                  |   2 +
 solr/licenses/jackson-annotations-2.12.3.jar.sha1  |   1 +
 solr/licenses/jackson-core-2.12.3.jar.sha1         |   1 +
 solr/licenses/jackson-databind-2.12.3.jar.sha1     |   1 +
 .../jackson-dataformat-cbor-2.12.3.jar.sha1        |   1 +
 .../jackson-dataformat-cbor-LICENSE-ASL.txt        | 201 ++++++++
 solr/licenses/jackson-dataformat-cbor-NOTICE.txt   |  20 +
 .../jackson-dataformat-smile-2.12.3.jar.sha1       |   1 +
 .../jackson-dataformat-xml-2.12.3.jar.sha1         |   1 +
 .../jackson-dataformat-xml-LICENSE-ASL.txt         | 201 ++++++++
 solr/licenses/jackson-dataformat-xml-NOTICE.txt    |   0
 .../licenses/jackson-datatype-jdk8-2.12.3.jar.sha1 |   1 +
 .../licenses/jackson-datatype-jdk8-LICENSE-ASL.txt | 201 ++++++++
 solr/licenses/jackson-datatype-jdk8-NOTICE.txt     |   0
 .../jackson-datatype-jsr310-2.12.3.jar.sha1        |   1 +
 .../jackson-datatype-jsr310-LICENSE-ASL.txt        | 201 ++++++++
 solr/licenses/jackson-datatype-jsr310-NOTICE.txt   |   0
 ...jackson-module-jaxb-annotations-2.12.3.jar.sha1 |   1 +
 ...jackson-module-jaxb-annotations-LICENSE-ASL.txt | 201 ++++++++
 .../jackson-module-jaxb-annotations-NOTICE.txt     |   0
 .../licenses/jackson-module-kotlin-2.12.3.jar.sha1 |   1 +
 .../jackson-module-parameter-names-2.12.3.jar.sha1 |   1 +
 .../jackson-module-parameter-names-LICENSE-ASL.txt | 201 ++++++++
 .../jackson-module-parameter-names-NOTICE.txt      |   0
 .../licenses/jakarta.activation-api-1.2.1.jar.sha1 |   1 +
 .../jakarta.activation-api-LICENSE-BSD_LIKE.txt    |  13 +
 solr/licenses/jakarta.activation-api-NOTICE.txt    |  25 +
 .../licenses/jakarta.annotation-api-1.3.5.jar.sha1 |   1 +
 .../jakarta.annotation-api-LICENSE-EPL.txt         | 277 ++++++++++
 solr/licenses/jakarta.annotation-api-NOTICE.txt    |  38 ++
 solr/licenses/jakarta.el-3.0.3.jar.sha1            |   1 +
 solr/licenses/jakarta.el-LICENSE-EPL.txt           | 277 ++++++++++
 solr/licenses/jakarta.el-NOTICE.txt                |  45 ++
 solr/licenses/jakarta.servlet-api-4.0.4.jar.sha1   |   1 +
 solr/licenses/jakarta.servlet-api-LICENSE-EPL.txt  | 277 ++++++++++
 solr/licenses/jakarta.servlet-api-NOTICE.txt       |  48 ++
 solr/licenses/jakarta.websocket-api-1.1.2.jar.sha1 |   1 +
 .../licenses/jakarta.websocket-api-LICENSE-EPL.txt | 277 ++++++++++
 solr/licenses/jakarta.websocket-api-NOTICE.txt     |  48 ++
 solr/licenses/jakarta.xml.bind-api-2.3.2.jar.sha1  |   1 +
 .../jakarta.xml.bind-api-LICENSE-BSD_LIKE.txt      |  13 +
 solr/licenses/jakarta.xml.bind-api-NOTICE.txt      |  44 ++
 solr/licenses/jaxb-api-2.3.1.jar.sha1              |   1 +
 solr/licenses/jaxb-api-LICENSE-CDDL.txt            | 362 +++++++++++++
 solr/licenses/jaxb-api-NOTICE.txt                  |   1 +
 solr/licenses/jmespath-java-1.12.42.jar.sha1       |   1 +
 solr/licenses/jmespath-java-LICENSE-ASL.txt        | 206 ++++++++
 solr/licenses/jmespath-java-NOTICE.txt             |  25 +
 solr/licenses/joda-time-2.9.9.jar.sha1             |   1 +
 solr/licenses/joda-time-LICENSE-ASL.txt            | 202 ++++++++
 solr/licenses/joda-time-NOTICE.txt                 |   5 +
 solr/licenses/metrics-spi-2.16.93.jar.sha1         |   1 +
 solr/licenses/metrics-spi-LICENSE-ASL.txt          | 206 ++++++++
 solr/licenses/metrics-spi-NOTICE.txt               |  25 +
 solr/licenses/micrometer-core-1.5.14.jar.sha1      |   1 +
 solr/licenses/micrometer-core-LICENSE-ASL.txt      | 201 ++++++++
 solr/licenses/micrometer-core-NOTICE.txt           |  45 ++
 solr/licenses/netty-nio-client-2.16.93.jar.sha1    |   1 +
 solr/licenses/netty-nio-client-LICENSE-ASL.txt     | 206 ++++++++
 solr/licenses/netty-nio-client-NOTICE.txt          |  25 +
 .../licenses/netty-reactive-streams-2.0.5.jar.sha1 |   1 +
 .../netty-reactive-streams-LICENSE-ASL.txt         | 202 ++++++++
 solr/licenses/netty-reactive-streams-NOTICE.txt    |   1 +
 .../netty-reactive-streams-http-2.0.5.jar.sha1     |   1 +
 .../netty-reactive-streams-http-LICENSE-ASL.txt    | 202 ++++++++
 .../netty-reactive-streams-http-NOTICE.txt         |   1 +
 solr/licenses/profiles-2.16.93.jar.sha1            |   1 +
 solr/licenses/profiles-LICENSE-ASL.txt             | 206 ++++++++
 solr/licenses/profiles-NOTICE.txt                  |  25 +
 solr/licenses/protocol-core-2.16.93.jar.sha1       |   1 +
 solr/licenses/protocol-core-LICENSE-ASL.txt        | 206 ++++++++
 solr/licenses/protocol-core-NOTICE.txt             |  25 +
 solr/licenses/reactive-streams-1.0.3.jar.sha1      |   1 +
 solr/licenses/reactive-streams-LICENSE-PD.txt      |   8 +
 solr/licenses/reactive-streams-NOTICE.txt          |   0
 solr/licenses/regions-2.16.93.jar.sha1             |   1 +
 solr/licenses/regions-LICENSE-ASL.txt              | 206 ++++++++
 solr/licenses/regions-NOTICE.txt                   |  25 +
 solr/licenses/s3-2.16.93.jar.sha1                  |   1 +
 solr/licenses/s3-LICENSE-ASL.txt                   | 206 ++++++++
 solr/licenses/s3-NOTICE.txt                        |  25 +
 solr/licenses/s3mock-2.1.34.jar.sha1               |   1 +
 solr/licenses/s3mock-LICENSE-ASL.txt               | 177 +++++++
 solr/licenses/s3mock-NOTICE.txt                    |   1 +
 solr/licenses/s3mock-junit4-2.1.34.jar.sha1        |   1 +
 solr/licenses/s3mock-junit4-LICENSE-ASL.txt        | 177 +++++++
 solr/licenses/s3mock-junit4-NOTICE.txt             |   1 +
 .../s3mock-testsupport-common-2.1.34.jar.sha1      |   1 +
 .../s3mock-testsupport-common-LICENSE-ASL.txt      | 177 +++++++
 solr/licenses/s3mock-testsupport-common-NOTICE.txt |   1 +
 solr/licenses/sdk-core-2.16.93.jar.sha1            |   1 +
 solr/licenses/sdk-core-LICENSE-ASL.txt             | 206 ++++++++
 solr/licenses/sdk-core-NOTICE.txt                  |  25 +
 solr/licenses/snakeyaml-1.26.jar.sha1              |   1 +
 solr/licenses/snakeyaml-LICENSE-ASL.txt            | 176 +++++++
 solr/licenses/snakeyaml-NOTICE.txt                 |   1 +
 solr/licenses/spring-aop-5.2.15.RELEASE.jar.sha1   |   1 +
 solr/licenses/spring-aop-LICENSE-ASL.txt           | 202 ++++++++
 solr/licenses/spring-aop-NOTICE.txt                |   1 +
 solr/licenses/spring-beans-5.2.15.RELEASE.jar.sha1 |   1 +
 solr/licenses/spring-beans-LICENSE-ASL.txt         | 202 ++++++++
 solr/licenses/spring-beans-NOTICE.txt              |   1 +
 solr/licenses/spring-boot-2.3.12.RELEASE.jar.sha1  |   1 +
 solr/licenses/spring-boot-LICENSE-ASL.txt          | 202 ++++++++
 solr/licenses/spring-boot-NOTICE.txt               |   1 +
 .../spring-boot-actuator-2.3.12.RELEASE.jar.sha1   |   1 +
 solr/licenses/spring-boot-actuator-LICENSE-ASL.txt | 202 ++++++++
 solr/licenses/spring-boot-actuator-NOTICE.txt      |   1 +
 ...-actuator-autoconfigure-2.3.12.RELEASE.jar.sha1 |   1 +
 ...ing-boot-actuator-autoconfigure-LICENSE-ASL.txt | 202 ++++++++
 .../spring-boot-actuator-autoconfigure-NOTICE.txt  |   1 +
 ...ring-boot-autoconfigure-2.3.12.RELEASE.jar.sha1 |   1 +
 .../spring-boot-autoconfigure-LICENSE-ASL.txt      | 202 ++++++++
 solr/licenses/spring-boot-autoconfigure-NOTICE.txt |   1 +
 .../spring-boot-starter-2.3.12.RELEASE.jar.sha1    |   1 +
 solr/licenses/spring-boot-starter-LICENSE-ASL.txt  | 202 ++++++++
 solr/licenses/spring-boot-starter-NOTICE.txt       |   1 +
 ...g-boot-starter-actuator-2.3.12.RELEASE.jar.sha1 |   1 +
 .../spring-boot-starter-actuator-LICENSE-ASL.txt   | 202 ++++++++
 .../spring-boot-starter-actuator-NOTICE.txt        |   1 +
 ...ring-boot-starter-jetty-2.3.12.RELEASE.jar.sha1 |   1 +
 .../spring-boot-starter-jetty-LICENSE-ASL.txt      | 202 ++++++++
 solr/licenses/spring-boot-starter-jetty-NOTICE.txt |   1 +
 ...pring-boot-starter-json-2.3.12.RELEASE.jar.sha1 |   1 +
 .../spring-boot-starter-json-LICENSE-ASL.txt       | 202 ++++++++
 solr/licenses/spring-boot-starter-json-NOTICE.txt  |   1 +
 ...ng-boot-starter-logging-2.3.12.RELEASE.jar.sha1 |   1 +
 .../spring-boot-starter-logging-LICENSE-ASL.txt    | 202 ++++++++
 .../spring-boot-starter-logging-NOTICE.txt         |   1 +
 ...spring-boot-starter-web-2.3.12.RELEASE.jar.sha1 |   1 +
 .../spring-boot-starter-web-LICENSE-ASL.txt        | 202 ++++++++
 solr/licenses/spring-boot-starter-web-NOTICE.txt   |   1 +
 .../spring-context-5.2.15.RELEASE.jar.sha1         |   1 +
 solr/licenses/spring-context-LICENSE-ASL.txt       | 202 ++++++++
 solr/licenses/spring-context-NOTICE.txt            |   1 +
 solr/licenses/spring-core-5.2.15.RELEASE.jar.sha1  |   1 +
 solr/licenses/spring-core-LICENSE-ASL.txt          | 202 ++++++++
 solr/licenses/spring-core-NOTICE.txt               |   1 +
 .../spring-expression-5.2.15.RELEASE.jar.sha1      |   1 +
 solr/licenses/spring-expression-LICENSE-ASL.txt    | 202 ++++++++
 solr/licenses/spring-expression-NOTICE.txt         |   1 +
 solr/licenses/spring-jcl-5.2.15.RELEASE.jar.sha1   |   1 +
 solr/licenses/spring-jcl-LICENSE-ASL.txt           | 202 ++++++++
 solr/licenses/spring-jcl-NOTICE.txt                |   1 +
 solr/licenses/spring-web-5.2.15.RELEASE.jar.sha1   |   1 +
 solr/licenses/spring-web-LICENSE-ASL.txt           | 202 ++++++++
 solr/licenses/spring-web-NOTICE.txt                |   1 +
 .../licenses/spring-webmvc-5.2.15.RELEASE.jar.sha1 |   1 +
 solr/licenses/spring-webmvc-LICENSE-ASL.txt        | 202 ++++++++
 solr/licenses/spring-webmvc-NOTICE.txt             |   1 +
 solr/licenses/stax2-api-3.1.4.jar.sha1             |   1 -
 solr/licenses/stax2-api-4.2.1.jar.sha1             |   1 +
 solr/licenses/stax2-api-NOTICE.txt                 |  18 +-
 .../url-connection-client-2.16.93.jar.sha1         |   1 +
 .../licenses/url-connection-client-LICENSE-ASL.txt | 206 ++++++++
 solr/licenses/url-connection-client-NOTICE.txt     |  25 +
 solr/licenses/utils-2.16.93.jar.sha1               |   1 +
 solr/licenses/utils-LICENSE-ASL.txt                | 206 ++++++++
 solr/licenses/utils-NOTICE.txt                     |  25 +
 solr/licenses/woodstox-core-6.2.4.jar.sha1         |   1 +
 solr/licenses/woodstox-core-LICENSE-ASL.txt        | 202 ++++++++
 solr/licenses/woodstox-core-NOTICE.txt             |  37 ++
 solr/server/etc/security.policy                    |   2 +
 .../src/making-and-restoring-backups.adoc          |  97 +++-
 .../collections/AbstractBackupRepositoryTest.java  |   8 +
 .../apache/solr/core/TrackingBackupRepository.java |  10 +
 261 files changed, 15983 insertions(+), 73 deletions(-)

diff --git a/dev-tools/idea/.idea/libraries/Solr_s3_repository_library.xml b/dev-tools/idea/.idea/libraries/Solr_s3_repository_library.xml
new file mode 100644
index 0000000..a9fe497
--- /dev/null
+++ b/dev-tools/idea/.idea/libraries/Solr_s3_repository_library.xml
@@ -0,0 +1,10 @@
+<component name="libraryTable">
+  <library name="Solr s3 repository library">
+    <CLASSES>
+      <root url="file://$PROJECT_DIR$/solr/contrib/s3-repository/lib" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+    <jarDirectory url="file://$PROJECT_DIR$/solr/contrib/s3-repository/lib" recursive="false" />
+  </library>
+</component>
diff --git a/dev-tools/idea/.idea/libraries/Solr_s3_repository_test_library.xml b/dev-tools/idea/.idea/libraries/Solr_s3_repository_test_library.xml
new file mode 100644
index 0000000..2ae96f8
--- /dev/null
+++ b/dev-tools/idea/.idea/libraries/Solr_s3_repository_test_library.xml
@@ -0,0 +1,10 @@
+<component name="libraryTable">
+  <library name="Solr s3 repository test library">
+    <CLASSES>
+      <root url="file://$PROJECT_DIR$/solr/contrib/s3-repository/test-lib" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+    <jarDirectory url="file://$PROJECT_DIR$/solr/contrib/s3-repository/test-lib" recursive="false" />
+  </library>
+</component>
\ No newline at end of file
diff --git a/dev-tools/idea/.idea/modules.xml b/dev-tools/idea/.idea/modules.xml
index 4b87b29..e277a0d 100644
--- a/dev-tools/idea/.idea/modules.xml
+++ b/dev-tools/idea/.idea/modules.xml
@@ -59,6 +59,7 @@
       <module group="Solr/Contrib" filepath="$PROJECT_DIR$/solr/contrib/langid/langid.iml" />
       <module group="Solr/Contrib" filepath="$PROJECT_DIR$/solr/contrib/ltr/ltr.iml" />
       <module group="Solr/Contrib" filepath="$PROJECT_DIR$/solr/contrib/prometheus-exporter/prometheus-exporter.iml" />
+      <module group="Solr/Contrib" filepath="$PROJECT_DIR$/solr/contrib/s3-repository/s3-repository.iml" />
       <module group="Solr/Contrib" filepath="$PROJECT_DIR$/solr/contrib/jaegertracer-configurator/jaegertracer-configurator.iml" />
       <module group="Solr/Contrib" filepath="$PROJECT_DIR$/solr/contrib/velocity/velocity.iml" />
     </modules>
diff --git a/dev-tools/idea/solr/contrib/s3-repository/s3-repository.iml b/dev-tools/idea/solr/contrib/s3-repository/s3-repository.iml
new file mode 100644
index 0000000..e493f4d
--- /dev/null
+++ b/dev-tools/idea/solr/contrib/s3-repository/s3-repository.iml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="false">
+    <output url="file://$MODULE_DIR$/../../../idea-build/solr/contrib/s3-repository/classes/java" />
+    <output-test url="file://$MODULE_DIR$/../../../idea-build/solr/contrib/s3-repository/classes/test" />
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/test" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test-files" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/java" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" scope="TEST" name="JUnit" level="project" />
+    <orderEntry type="library" scope="TEST" name="Solr s3 repository test library" level="project" />
+    <orderEntry type="library" name="Solr core library" level="project" />
+    <orderEntry type="library" name="Solrj library" level="project" />
+    <orderEntry type="module" scope="TEST" module-name="lucene-test-framework" />
+    <orderEntry type="module" scope="TEST" module-name="solr-test-framework" />
+    <orderEntry type="library" name="Solr core library" level="project" />
+    <orderEntry type="library" name="Solrj library" level="project" />
+    <orderEntry type="library" name="Solr s3 repository library" level="project" />
+    <orderEntry type="module" module-name="lucene-core" />
+    <orderEntry type="module" module-name="solr-core" />
+    <orderEntry type="module" module-name="solrj" />
+    <orderEntry type="module" module-name="analysis-common" />
+    <orderEntry type="module" scope="TEST" module-name="join" />
+  </component>
+</module>
diff --git a/dev-tools/maven/solr/contrib/s3-repository/pom.xml.template b/dev-tools/maven/solr/contrib/s3-repository/pom.xml.template
new file mode 100644
index 0000000..5d8140b
--- /dev/null
+++ b/dev-tools/maven/solr/contrib/s3-repository/pom.xml.template
@@ -0,0 +1,48 @@
+<!--
+  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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.solr</groupId>
+    <artifactId>solr-parent</artifactId>
+    <version>@version@</version>
+    <relativePath>../../pom.xml</relativePath>
+  </parent>
+  <groupId>org.apache.solr</groupId>
+  <artifactId>solr-s3-repository</artifactId>
+  <packaging>jar</packaging>
+  <name>Apache Solr S3 BackupRepository</name>
+  <description>
+    BackupRepository implementation for AWS Cloud Storage (S3)
+  </description>
+  <properties>
+    <module-directory>solr/contrib/s3-repository</module-directory>
+  </properties>
+  <scm>
+    <connection>scm:git:${vc-anonymous-base-url}</connection>
+    <developerConnection>scm:git:${vc-dev-base-url}</developerConnection>
+    <url>${vc-browse-base-url};f=${module-directory}</url>
+  </scm>
+  <dependencies>
+@solr-s3-repository.internal.dependencies@
+@solr-s3-repository.external.dependencies@
+  </dependencies>
+</project>
diff --git a/lucene/common-build.xml b/lucene/common-build.xml
index 6725f9b..e994028 100644
--- a/lucene/common-build.xml
+++ b/lucene/common-build.xml
@@ -1232,6 +1232,13 @@
                 <propertyref prefix="solr.tests.use.numeric.points" />
             </syspropertyset>
 
+            <!-- Properties for the Solr s3-repository -->
+            <syspropertyset>
+              <propertyref prefix="server.jetty.threads.idle-timeout" />
+              <propertyref prefix="spring.autoconfigure.exclude" />
+              <propertyref prefix="spring.jmx.enabled" />
+            </syspropertyset>
+
             <!-- Pass randomized settings to the forked JVM. -->
             <syspropertyset ignoreEmpty="true">
                 <propertyref prefix="tests.file.encoding" />
diff --git a/lucene/ivy-versions.properties b/lucene/ivy-versions.properties
index ee2f58e..064adbe 100644
--- a/lucene/ivy-versions.properties
+++ b/lucene/ivy-versions.properties
@@ -2,6 +2,16 @@
 # Blank lines, comment lines, and keys that aren't in /org/name format are ignored
 # when the lexical sort check is performed by the ant check-lib-versions target.
 
+com.adobe.testing.s3mock.version = 2.1.34
+/com.adobe.testing/s3mock = ${com.adobe.testing.s3mock.version}
+/com.adobe.testing/s3mock-junit4 = ${com.adobe.testing.s3mock.version}
+/com.adobe.testing/s3mock-testsupport-common = ${com.adobe.testing.s3mock.version}
+
+com.amazonaws.version = 1.12.42
+/com.amazonaws/aws-java-sdk-bom = ${com.amazonaws.version}
+/com.amazonaws/aws-java-sdk-core = ${com.amazonaws.version}
+/com.amazonaws/aws-java-sdk-s3 = ${com.amazonaws.version}
+
 com.carrotsearch.randomizedtesting.version = 2.7.2
 /com.carrotsearch.randomizedtesting/junit4-ant = ${com.carrotsearch.randomizedtesting.version}
 /com.carrotsearch.randomizedtesting/randomizedtesting-runner = ${com.carrotsearch.randomizedtesting.version}
@@ -14,11 +24,18 @@ com.carrotsearch.randomizedtesting.version = 2.7.2
 
 /com.esri.geometry/esri-geometry-api = 2.2.0
 
-com.fasterxml.jackson.core.version = 2.11.2
+com.fasterxml.jackson.core.version = 2.12.3
 /com.fasterxml.jackson.core/jackson-annotations = ${com.fasterxml.jackson.core.version}
 /com.fasterxml.jackson.core/jackson-core = ${com.fasterxml.jackson.core.version}
 /com.fasterxml.jackson.core/jackson-databind = ${com.fasterxml.jackson.core.version}
 /com.fasterxml.jackson.dataformat/jackson-dataformat-smile = ${com.fasterxml.jackson.core.version}
+/com.fasterxml.jackson.dataformat/jackson-dataformat-xml = ${com.fasterxml.jackson.core.version}
+/com.fasterxml.jackson.datatype/jackson-datatype-jdk8 = ${com.fasterxml.jackson.core.version}
+/com.fasterxml.jackson.datatype/jackson-datatype-jsr310 = ${com.fasterxml.jackson.core.version}
+/com.fasterxml.jackson.module/jackson-module-jaxb-annotations = ${com.fasterxml.jackson.core.version}
+/com.fasterxml.jackson.module/jackson-module-parameter-names = ${com.fasterxml.jackson.core.version}
+
+/com.fasterxml.woodstox/woodstox-core = 6.2.4
 
 /com.github.ben-manes.caffeine/caffeine = 2.8.4
 /com.github.virtuald/curvesapi = 1.06
@@ -70,6 +87,11 @@ com.sun.jersey.version = 1.19
 /com.sun.mail/javax.mail = 1.5.1
 
 /com.tdunning/t-digest = 3.1
+
+com.typesafe.netty.version = 2.0.5
+/com.typesafe.netty/netty-reactive-streams = ${com.typesafe.netty.version}
+/com.typesafe.netty/netty-reactive-streams-http = ${com.typesafe.netty.version}
+
 /com.vaadin.external.google/android-json = 0.0.20131108.vaadin1
 /com.zaxxer/SparseBitSet = 1.2
 /commons-cli/commons-cli = 1.4
@@ -95,6 +117,8 @@ io.jaegertracing.version = 1.1.0
 /io.jaegertracing/jaeger-core = ${io.jaegertracing.version}
 /io.jaegertracing/jaeger-thrift = ${io.jaegertracing.version}
 
+/io.micrometer/micrometer-core = 1.5.14
+
 io.netty.netty.version = 4.1.50.Final
 /io.netty/netty-all = ${io.netty.netty.version}
 /io.netty/netty-buffer = ${io.netty.netty.version}
@@ -122,9 +146,16 @@ io.prometheus.version = 0.2.0
 
 /io.sgr/s2-geometry-library-java = 1.0.0
 
+/jakarta.annotation/jakarta.annotation-api = 1.3.5
+/jakarta.servlet/jakarta.servlet-api = 4.0.4
+/jakarta.websocket/jakarta.websocket-api = 1.1.2
+/jakarta.xml.bind/jakarta.xml.bind-api = 2.3.2
 
 /javax.activation/activation = 1.1.1
 /javax.servlet/javax.servlet-api = 3.1.0
+/javax.xml.bind/jaxb-api = 2.3.1
+
+/joda-time/joda-time = 2.9.9
 /junit/junit = 4.13.1
 
 /mecab/mecab-ipadic = 2.7.0-20070801
@@ -183,7 +214,7 @@ org.apache.hadoop.version = 3.2.2
 # The httpcore version is often different from the httpclient and httpmime versions,
 # so the httpcore version value should not share the same symbolic name with them.
 /org.apache.httpcomponents/httpclient = 4.5.12
-/org.apache.httpcomponents/httpcore = 4.4.13
+/org.apache.httpcomponents/httpcore = 4.4.14
 /org.apache.httpcomponents/httpmime = 4.5.12
 
 /org.apache.ivy/ivy = 2.4.0
@@ -283,7 +314,7 @@ org.codehaus.janino.version = 3.0.9
 /org.codehaus.janino/commons-compiler = ${org.codehaus.janino.version}
 /org.codehaus.janino/janino = ${org.codehaus.janino.version}
 
-/org.codehaus.woodstox/stax2-api = 3.1.4
+/org.codehaus.woodstox/stax2-api = 4.2.1
 /org.codehaus.woodstox/woodstox-core-asl = 4.4.1
 
 org.eclipse.jetty.version = 9.4.41.v20210516
@@ -316,13 +347,19 @@ org.gagravarr.vorbis.java.version = 0.8
 /org.gagravarr/vorbis-java-core = ${org.gagravarr.vorbis.java.version}
 /org.gagravarr/vorbis-java-tika = ${org.gagravarr.vorbis.java.version}
 
+/org.glassfish/jakarta.el = 3.0.3
+
 /org.hamcrest/hamcrest-core = 1.3
 
+/org.hdrhistogram/HdrHistogram = 2.1.12
+
 /org.hsqldb/hsqldb = 2.4.0
 /org.jdom/jdom2 = 2.0.6
 
 /org.jsoup/jsoup = 1.12.1
 
+/org.latencyutils/LatencyUtils = 2.0.3
+
 /org.locationtech.jts/jts-core = 1.15.0
 /org.locationtech.spatial4j/spatial4j = 0.7
 
@@ -342,6 +379,28 @@ org.slf4j.version = 1.7.24
 /org.slf4j/slf4j-api = ${org.slf4j.version}
 /org.slf4j/slf4j-simple = ${org.slf4j.version}
 
+org.springframework.boot.version = 2.3.12.RELEASE
+/org.springframework.boot/spring-boot = ${org.springframework.boot.version}
+/org.springframework.boot/spring-boot-actuator = ${org.springframework.boot.version}
+/org.springframework.boot/spring-boot-actuator-autoconfigure = ${org.springframework.boot.version}
+/org.springframework.boot/spring-boot-autoconfigure = ${org.springframework.boot.version}
+/org.springframework.boot/spring-boot-starter = ${org.springframework.boot.version}
+/org.springframework.boot/spring-boot-starter-actuator = ${org.springframework.boot.version}
+/org.springframework.boot/spring-boot-starter-jetty = ${org.springframework.boot.version}
+/org.springframework.boot/spring-boot-starter-json = ${org.springframework.boot.version}
+/org.springframework.boot/spring-boot-starter-logging = ${org.springframework.boot.version}
+/org.springframework.boot/spring-boot-starter-web = ${org.springframework.boot.version}
+
+org.springframework.version = 5.2.15.RELEASE
+/org.springframework/spring-aop = ${org.springframework.version}
+/org.springframework/spring-beans = ${org.springframework.version}
+/org.springframework/spring-context = ${org.springframework.version}
+/org.springframework/spring-core = ${org.springframework.version}
+/org.springframework/spring-expression = ${org.springframework.version}
+/org.springframework/spring-jcl = ${org.springframework.version}
+/org.springframework/spring-web = ${org.springframework.version}
+/org.springframework/spring-webmvc = ${org.springframework.version}
+
 /org.tallison.xmp/xmpcore-shaded = 6.1.10
 /org.tallison/isoparser = 1.9.41.2
 /org.tallison/jmatio = 1.5
@@ -355,6 +414,27 @@ org.slf4j.version = 1.7.24
 org.xerial.snappy.version = 1.1.7.6
 /org.xerial.snappy/snappy-java = ${org.xerial.snappy.version}
 
+/org.yaml/snakeyaml = 1.26
+
+software.amazon.awssdk.version = 2.16.93
+/software.amazon.awssdk/apache-client = ${software.amazon.awssdk.version}
+/software.amazon.awssdk/arns = ${software.amazon.awssdk.version}
+/software.amazon.awssdk/auth = ${software.amazon.awssdk.version}
+/software.amazon.awssdk/aws-core = ${software.amazon.awssdk.version}
+/software.amazon.awssdk/aws-query-protocol = ${software.amazon.awssdk.version}
+/software.amazon.awssdk/aws-xml-protocol = ${software.amazon.awssdk.version}
+/software.amazon.awssdk/http-client-spi = ${software.amazon.awssdk.version}
+/software.amazon.awssdk/metrics-spi = ${software.amazon.awssdk.version}
+/software.amazon.awssdk/netty-nio-client = ${software.amazon.awssdk.version}
+/software.amazon.awssdk/profiles = ${software.amazon.awssdk.version}
+/software.amazon.awssdk/protocol-core = ${software.amazon.awssdk.version}
+/software.amazon.awssdk/regions = ${software.amazon.awssdk.version}
+/software.amazon.awssdk/s3 = ${software.amazon.awssdk.version}
+/software.amazon.awssdk/sdk-core = ${software.amazon.awssdk.version}
+/software.amazon.awssdk/url-connection-client = ${software.amazon.awssdk.version}
+/software.amazon.awssdk/utils = ${software.amazon.awssdk.version}
+
+/software.amazon.ion/ion-java = 1.0.2
 
 ua.net.nlp.morfologik-ukrainian-search.version = 4.9.1
 /ua.net.nlp/morfologik-ukrainian-search = ${ua.net.nlp.morfologik-ukrainian-search.version}
diff --git a/lucene/licenses/httpcore-4.4.13.jar.sha1 b/lucene/licenses/httpcore-4.4.13.jar.sha1
deleted file mode 100644
index cffee03..0000000
--- a/lucene/licenses/httpcore-4.4.13.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-853b96d3afbb7bf8cc303fe27ee96836a10c1834
diff --git a/lucene/licenses/httpcore-4.4.14.jar.sha1 b/lucene/licenses/httpcore-4.4.14.jar.sha1
new file mode 100644
index 0000000..85629d5
--- /dev/null
+++ b/lucene/licenses/httpcore-4.4.14.jar.sha1
@@ -0,0 +1 @@
+9dd1a631c082d92ecd4bd8fd4cf55026c720a8c1
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 81fa79a..b460864 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -19,6 +19,8 @@ New Features
 
 * SOLR-15527: Security screen in Admin UI for managing users, roles, and permissions (Timothy Potter)
 
+* SOLR-15089: Allow backup/restoration to Amazon's S3 blobstore (Andy Throgmorton, Houston Putman, Jason Gerlowski, Pierre Salagnac, Mike Drob)
+
 Improvements
 ---------------------
 * SOLR-15460: Implement LIKE, IS NOT NULL, IS NULL, and support wildcard * in equals string literal for Parallel SQL (Timothy Potter, Houston Putman)
diff --git a/solr/NOTICE.txt b/solr/NOTICE.txt
index c6e2a8b..3332168 100644
--- a/solr/NOTICE.txt
+++ b/solr/NOTICE.txt
@@ -70,6 +70,13 @@ License: http://hsqldb.org/web/hsqlLicense.html
 Jersey Core: https://jersey.java.net/
 License: Common Development and Distribution License (CDDL) v1.0 (https://glassfish.dev.java.net/public/CDDLv1.0.html)
 
+Jakarta Activation API: https://eclipse-ee4j.github.io/jaf/
+Copyright (c) 2007, Eclipse Foundation, Inc. and its licensors.
+
+Jakarta XML Binding: https://github.com/javaee/jaxb-spec
+License: Common Development and Distribution License (CDDL) v1.1 (https://glassfish.java.net/public/CDDL+GPL_1_1.html)
+Copyright (c) 2003-2018 Oracle and/or its affiliates. All rights reserved.
+
 The HdfsDirectory and BlockDirectory were derived from
 the Apache Blur incubating project and are Apache License 2.0.
 
@@ -648,4 +655,9 @@ https://github.com/yonik/noggit
    * HOMEPAGE:
      * https://github.com/cncf/udpa
    * LOCATION_IN_GRPC:
-     * xds/third_party/udpa
\ No newline at end of file
+     * xds/third_party/udpa
+
+The S3 Output Stream is based on ASL 2.0 reference implementations found at:
+    https://github.com/confluentinc/kafka-connect-storage-cloud/blob/5.0.x/kafka-connect-s3/src/main/java/io/confluent/connect/s3/storage/S3OutputStream.java
+This files resides at:
+    contrib/s3-repository/src/java/org/apache/solr/s3/S3OutputStream.javaTestIncrementalCoreBackup
diff --git a/solr/contrib/gcs-repository/src/java/org/apache/solr/gcs/GCSBackupRepository.java b/solr/contrib/gcs-repository/src/java/org/apache/solr/gcs/GCSBackupRepository.java
index c955525..7313f24 100644
--- a/solr/contrib/gcs-repository/src/java/org/apache/solr/gcs/GCSBackupRepository.java
+++ b/solr/contrib/gcs-repository/src/java/org/apache/solr/gcs/GCSBackupRepository.java
@@ -135,6 +135,17 @@ public class GCSBackupRepository implements BackupRepository {
     }
 
     @Override
+    public URI createDirectoryURI(String location) {
+        Objects.requireNonNull(location);
+
+        if (!location.endsWith("/")) {
+            location += "/";
+        }
+
+        return createURI(location);
+    }
+
+    @Override
     public URI resolve(URI baseUri, String... pathComponents) {
         StringBuilder builder = new StringBuilder(baseUri.toString());
         for (String path : pathComponents) {
@@ -146,7 +157,21 @@ public class GCSBackupRepository implements BackupRepository {
             }
         }
 
-        return URI.create(builder.toString());
+        return URI.create(builder.toString()).normalize();
+    }
+
+    @Override
+    public URI resolveDirectory(URI baseUri, String... pathComponents) {
+        if (pathComponents.length > 0) {
+            if (!pathComponents[pathComponents.length - 1].endsWith("/")) {
+                pathComponents[pathComponents.length - 1] = pathComponents[pathComponents.length - 1] + "/";
+            }
+        } else {
+            if (!baseUri.getPath().endsWith("/")) {
+                baseUri = URI.create(baseUri + "/");
+            }
+        }
+        return resolve(baseUri, pathComponents);
     }
 
     @Override
@@ -212,9 +237,7 @@ public class GCSBackupRepository implements BackupRepository {
     }
 
     private IndexInput openInput(URI dirPath, String fileName, IOContext ctx, int bufferSize) {
-        String blobName = dirPath.toString();
-        blobName = appendTrailingSeparatorIfNecessary(blobName);
-        blobName += fileName;
+        String blobName = resolve(dirPath, fileName).toString();
 
         final BlobId blobId = BlobId.of(bucketName, blobName);
         final Blob blob = storage.get(blobId, Storage.BlobGetOption.fields(Storage.BlobField.SIZE));
diff --git a/solr/contrib/gcs-repository/src/test/org/apache/solr/gcs/LocalStorageGCSBackupRepository.java b/solr/contrib/gcs-repository/src/test/org/apache/solr/gcs/LocalStorageGCSBackupRepository.java
index 48f3b80..21426bb 100644
--- a/solr/contrib/gcs-repository/src/test/org/apache/solr/gcs/LocalStorageGCSBackupRepository.java
+++ b/solr/contrib/gcs-repository/src/test/org/apache/solr/gcs/LocalStorageGCSBackupRepository.java
@@ -95,7 +95,7 @@ public class LocalStorageGCSBackupRepository extends GCSBackupRepository {
   protected void initializeBackupLocation() {
     try {
       final String baseLocation = getBackupLocation(null);
-      final URI baseLocationUri = createURI(baseLocation);
+      final URI baseLocationUri = createDirectoryURI(baseLocation);
       createDirectory(baseLocationUri);
     } catch (Exception e) {
       throw new RuntimeException(e);
diff --git a/solr/contrib/s3-repository/README.md b/solr/contrib/s3-repository/README.md
new file mode 100644
index 0000000..977d389
--- /dev/null
+++ b/solr/contrib/s3-repository/README.md
@@ -0,0 +1,59 @@
+Apache Solr - S3 Repository
+===========================
+
+This S3 repository is a backup repository implementation designed to provide backup/restore functionality to Amazon S3.
+
+# Getting Started
+
+Add this to your `solr.xml`:
+
+    <backup>
+        <repository name="s3" class="org.apache.solr.s3.S3BackupRepository" default="false">
+            <str name="s3.bucket.name">BUCKET_NAME</str>
+            <str name="s3.region">us-west-2</str>
+        </repository>
+    </backup>
+
+This plugin uses the [default AWS credentials provider chain](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html), so ensure that your credentials are set appropriately (e.g., via env var, or in `~/.aws/credentials`, etc.).
+
+## Testing locally
+
+To run / test locally, first spin up S3Mock:
+
+    mkdir /tmp/s3
+    docker run -p 9090:9090 --env initialBuckets=TEST_BUCKET -v /tmp/s3:/s3mockroot -t adobe/s3mock
+
+Add this to your `solr.xml`:
+
+    <backup>
+        <repository name="s3" class="org.apache.solr.s3.S3BackupRepository" default="false">
+            <str name="s3.endpoint">http://localhost:9090</str>
+            <str name="s3.bucket.name">TEST_BUCKET</str>
+            <str name="s3.region">us-east-1</str>
+        </repository>
+    </backup>
+
+Start Solr, and create a collection (e.g., "foo"). Then hit the following URL, which will take a backup and persist it in S3Mock under the name `test`:
+
+http://localhost:8983/solr/admin/collections?action=BACKUP&repository=s3&location=s3:/&collection=foo&name=test
+
+To restore from that backup, hit this URL, which will create a new collection `bar` with the contents of the backup `test` you just made: 
+
+http://localhost:8983/solr/admin/collections?action=RESTORE&repository=s3&location=s3:/&name=test&collection=bar
+
+## Change the S3 Endpoint
+
+If you are also running Solr in a docker image, and need to set the endpoint of S3Mock to be different than `localhost`, then add the following under `<repository>`:
+
+    <backup>
+        <repository name="s3" class="org.apache.solr.s3.S3BackupRepository" default="false">
+            <str name="s3.bucket.name">TEST_BUCKET</str>
+            <str name="s3.endpoint">http://host.docker.internal:9090</str>
+            <str name="s3.region">us-east-1</str>
+        </repository>
+    </backup>
+
+This works for the regular S3 backup repository as well (not mock).
+But the plugin only provides official support for AWS S3, not _S3 compatible_ products.
+Use this plugin with _S3 compatible_ products at your own risk.
+Certain options, such as Minio, are known to be incompatible with this plugin.
diff --git a/solr/contrib/s3-repository/build.xml b/solr/contrib/s3-repository/build.xml
new file mode 100644
index 0000000..8e96c15
--- /dev/null
+++ b/solr/contrib/s3-repository/build.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+
+<!--
+   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.
+-->
+
+<project name="solr-s3-repository" default="default">
+  <description>
+    BackupRepository implementation for Amazon Cloud Storage (S3)
+  </description>
+  <import file="../contrib-build.xml"/>
+  <path id="classpath">
+    <path refid="solr.base.classpath"/>
+  </path>
+  <target name="compile-core" depends="solr-contrib-build.compile-core"/>
+
+  <path id="test.classpath">
+    <path refid="solr.test.base.classpath"/>
+    <fileset dir="${test.lib.dir}" includes="*.jar"/>
+  </path>
+
+</project>
diff --git a/solr/contrib/s3-repository/ivy.xml b/solr/contrib/s3-repository/ivy.xml
new file mode 100644
index 0000000..be978dd
--- /dev/null
+++ b/solr/contrib/s3-repository/ivy.xml
@@ -0,0 +1,91 @@
+<!--
+   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.
+-->
+<ivy-module version="2.0">
+  <info organisation="org.apache.solr" module="s3-repository"/>
+  <configurations defaultconfmapping="compile->master;test->master">
+    <conf name="compile" transitive="true"/>
+    <conf name="test" transitive="false"/>
+  </configurations>
+  <dependencies>
+    <dependency org="com.amazonaws" name="aws-java-sdk-bom" rev="${/com.amazonaws/aws-java-sdk-bom}" conf="compile"/>
+    <dependency org="com.amazonaws" name="aws-java-sdk-core" rev="${/com.amazonaws/aws-java-sdk-core}" conf="compile"/>
+    <dependency org="com.amazonaws" name="aws-java-sdk-s3" rev="${/com.amazonaws/aws-java-sdk-s3}" conf="compile"/>
+    <dependency org="javax.xml.bind" name="jaxb-api" rev="${/javax.xml.bind/jaxb-api}" conf="compile"/>
+    <dependency org="joda-time" name="joda-time" rev="${/joda-time/joda-time}" conf="compile"/>
+    <dependency org="software.amazon.awssdk" name="apache-client" rev="${/software.amazon.awssdk/apache-client}" conf="compile"/>
+    <dependency org="software.amazon.awssdk" name="arns" rev="${/software.amazon.awssdk/arns}" conf="compile"/>
+    <dependency org="software.amazon.awssdk" name="auth" rev="${/software.amazon.awssdk/auth}" conf="compile"/>
+    <dependency org="software.amazon.awssdk" name="aws-core" rev="${/software.amazon.awssdk/aws-core}" conf="compile"/>
+    <dependency org="software.amazon.awssdk" name="aws-query-protocol" rev="${/software.amazon.awssdk/aws-query-protocol}" conf="compile"/>
+    <dependency org="software.amazon.awssdk" name="aws-xml-protocol" rev="${/software.amazon.awssdk/aws-xml-protocol}" conf="compile"/>
+    <dependency org="software.amazon.awssdk" name="http-client-spi" rev="${/software.amazon.awssdk/http-client-spi}" conf="compile"/>
+    <dependency org="software.amazon.awssdk" name="metrics-spi" rev="${/software.amazon.awssdk/metrics-spi}" conf="compile"/>
+    <dependency org="software.amazon.awssdk" name="netty-nio-client" rev="${/software.amazon.awssdk/netty-nio-client}" conf="compile"/>
+    <dependency org="software.amazon.awssdk" name="profiles" rev="${/software.amazon.awssdk/profiles}" conf="compile"/>
+    <dependency org="software.amazon.awssdk" name="protocol-core" rev="${/software.amazon.awssdk/protocol-core}" conf="compile"/>
+    <dependency org="software.amazon.awssdk" name="regions" rev="${/software.amazon.awssdk/regions}" conf="compile"/>
+    <dependency org="software.amazon.awssdk" name="s3" rev="${/software.amazon.awssdk/s3}" conf="compile"/>
+    <dependency org="software.amazon.awssdk" name="sdk-core" rev="${/software.amazon.awssdk/sdk-core}" conf="compile"/>
+    <dependency org="software.amazon.awssdk" name="url-connection-client" rev="${/software.amazon.awssdk/url-connection-client}" conf="compile"/>
+    <dependency org="software.amazon.awssdk" name="utils" rev="${/software.amazon.awssdk/utils}" conf="compile"/>
+    <dependency org="software.amazon.ion" name="ion-java" rev="${/software.amazon.ion/ion-java}" conf="compile"/>
+
+    <dependency org="com.adobe.testing" name="s3mock" rev="${/com.adobe.testing/s3mock}" conf="test"/>
+    <dependency org="com.adobe.testing" name="s3mock-junit4" rev="${/com.adobe.testing/s3mock-junit4}" conf="test"/>
+    <dependency org="com.adobe.testing" name="s3mock-testsupport-common" rev="${/com.adobe.testing/s3mock-testsupport-common}" conf="test"/>
+    <dependency org="com.fasterxml.jackson.dataformat" name="jackson-dataformat-xml" rev="${/com.fasterxml.jackson.dataformat/jackson-dataformat-xml}" conf="test"/>
+    <dependency org="com.fasterxml.jackson.datatype" name="jackson-datatype-jdk8" rev="${/com.fasterxml.jackson.datatype/jackson-datatype-jdk8}" conf="test"/>
+    <dependency org="com.fasterxml.jackson.datatype" name="jackson-datatype-jsr310" rev="${/com.fasterxml.jackson.datatype/jackson-datatype-jsr310}" conf="test"/>
+    <dependency org="com.fasterxml.jackson.module" name="jackson-module-jaxb-annotations" rev="${/com.fasterxml.jackson.module/jackson-module-jaxb-annotations}" conf="test"/>
+    <dependency org="com.fasterxml.jackson.module" name="jackson-module-parameter-names" rev="${/com.fasterxml.jackson.module/jackson-module-parameter-names}" conf="test"/>
+    <dependency org="com.fasterxml.woodstox" name="woodstox-core" rev="${/com.fasterxml.woodstox/woodstox-core}" conf="test"/>
+    <dependency org="com.typesafe.netty" name="netty-reactive-streams-http" rev="${/com.typesafe.netty/netty-reactive-streams-http}" conf="test"/>
+    <dependency org="com.typesafe.netty" name="netty-reactive-streams" rev="${/com.typesafe.netty/netty-reactive-streams}" conf="test"/>
+    <dependency org="io.micrometer" name="micrometer-core" rev="${/io.micrometer/micrometer-core}" conf="test"/>
+    <dependency org="jakarta.annotation" name="jakarta.annotation-api" rev="${/jakarta.annotation/jakarta.annotation-api}" conf="test"/>
+    <dependency org="jakarta.servlet" name="jakarta.servlet-api" rev="${/jakarta.servlet/jakarta.servlet-api}" conf="test"/>
+    <dependency org="jakarta.websocket" name="jakarta.websocket-api" rev="${/jakarta.websocket/jakarta.websocket-api}" conf="test"/>
+    <dependency org="jakarta.xml.bind" name="jakarta.xml.bind-api" rev="${/jakarta.xml.bind/jakarta.xml.bind-api}" conf="test"/>
+    <dependency org="org.apache.httpcomponents" name="httpcore" rev="${/org.apache.httpcomponents/httpcore}" conf="test"/>
+    <dependency org="org.glassfish" name="jakarta.el" rev="${/org.glassfish/jakarta.el}" conf="test"/>
+    <dependency org="org.hdrhistogram" name="HdrHistogram" rev="${/org.hdrhistogram/HdrHistogram}" conf="test"/>
+    <dependency org="org.latencyutils" name="LatencyUtils" rev="${/org.latencyutils/LatencyUtils}" conf="test"/>
+    <dependency org="org.slf4j" name="jul-to-slf4j" rev="${/org.slf4j/jul-to-slf4j}" conf="test"/>
+    <dependency org="org.slf4j" name="slf4j-api" rev="${/org.slf4j/slf4j-api}" conf="test"/>
+    <dependency org="org.yaml" name="snakeyaml" rev="${/org.yaml/snakeyaml}" conf="test"/>
+    <dependency org="org.springframework.boot" name="spring-boot-actuator-autoconfigure" rev="${/org.springframework.boot/spring-boot-actuator-autoconfigure}" conf="test"/>
+    <dependency org="org.springframework.boot" name="spring-boot-actuator" rev="${/org.springframework.boot/spring-boot-actuator}" conf="test"/>
+    <dependency org="org.springframework.boot" name="spring-boot-autoconfigure" rev="${/org.springframework.boot/spring-boot-autoconfigure}" conf="test"/>
+    <dependency org="org.springframework.boot" name="spring-boot-starter-actuator" rev="${/org.springframework.boot/spring-boot-starter-actuator}" conf="test"/>
+    <dependency org="org.springframework.boot" name="spring-boot-starter-jetty" rev="${/org.springframework.boot/spring-boot-starter-jetty}" conf="test"/>
+    <dependency org="org.springframework.boot" name="spring-boot-starter-json" rev="${/org.springframework.boot/spring-boot-starter-json}" conf="test"/>
+    <dependency org="org.springframework.boot" name="spring-boot-starter-logging" rev="${/org.springframework.boot/spring-boot-starter-logging}" conf="test"/>
+    <dependency org="org.springframework.boot" name="spring-boot-starter-web" rev="${/org.springframework.boot/spring-boot-starter-web}" conf="test"/>
+    <dependency org="org.springframework.boot" name="spring-boot-starter" rev="${/org.springframework.boot/spring-boot-starter}" conf="test"/>
+    <dependency org="org.springframework.boot" name="spring-boot" rev="${/org.springframework.boot/spring-boot}" conf="test"/>
+    <dependency org="org.springframework" name="spring-aop" rev="${/org.springframework/spring-aop}" conf="test"/>
+    <dependency org="org.springframework" name="spring-beans" rev="${/org.springframework/spring-beans}" conf="test"/>
+    <dependency org="org.springframework" name="spring-context" rev="${/org.springframework/spring-context}" conf="test"/>
+    <dependency org="org.springframework" name="spring-core" rev="${/org.springframework/spring-core}" conf="test"/>
+    <dependency org="org.springframework" name="spring-expression" rev="${/org.springframework/spring-expression}" conf="test"/>
+    <dependency org="org.springframework" name="spring-jcl" rev="${/org.springframework/spring-jcl}" conf="test"/>
+    <dependency org="org.springframework" name="spring-web" rev="${/org.springframework/spring-web}" conf="test"/>
+    <dependency org="org.springframework" name="spring-webmvc" rev="${/org.springframework/spring-webmvc}" conf="test"/>
+  </dependencies>
+</ivy-module>
diff --git a/solr/contrib/s3-repository/src/java/org/apache/solr/s3/S3BackupRepository.java b/solr/contrib/s3-repository/src/java/org/apache/solr/s3/S3BackupRepository.java
new file mode 100644
index 0000000..d92f285
--- /dev/null
+++ b/solr/contrib/s3-repository/src/java/org/apache/solr/s3/S3BackupRepository.java
@@ -0,0 +1,401 @@
+/*
+ * 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.solr.s3;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.invoke.MethodHandles;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.time.Duration;
+import java.time.Instant;
+import java.util.Collection;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+import org.apache.lucene.codecs.CodecUtil;
+import org.apache.lucene.index.CorruptIndexException;
+import org.apache.lucene.store.ChecksumIndexInput;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.IOContext;
+import org.apache.lucene.store.IndexInput;
+import org.apache.lucene.store.IndexOutput;
+import org.apache.solr.common.SolrException;
+import org.apache.solr.common.StringUtils;
+import org.apache.solr.common.util.NamedList;
+import org.apache.solr.core.DirectoryFactory;
+import org.apache.solr.core.backup.repository.BackupRepository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A concrete implementation of {@link BackupRepository} interface supporting backup/restore of Solr
+ * indexes to S3.
+ */
+public class S3BackupRepository implements BackupRepository {
+
+  private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+  private static final int CHUNK_SIZE = 16 * 1024 * 1024; // 16 MBs
+  static final String S3_SCHEME = "s3";
+
+  private NamedList<?> config;
+  private S3StorageClient client;
+
+  @Override
+  @SuppressWarnings({"rawtypes"})
+  public void init(NamedList args) {
+    this.config = args;
+    S3BackupRepositoryConfig backupConfig = new S3BackupRepositoryConfig(this.config);
+
+    // If a client was already created, close it to avoid any resource leak
+    if (client != null) {
+      client.close();
+    }
+
+    this.client = backupConfig.buildClient();
+  }
+
+  @Override
+  @SuppressWarnings("unchecked")
+  public <T> T getConfigProperty(String name) {
+    return (T) this.config.get(name);
+  }
+
+  @Override
+  public URI createURI(String location) {
+    if (StringUtils.isEmpty(location)) {
+      throw new IllegalArgumentException("cannot create URI with an empty location");
+    }
+
+    URI result;
+    try {
+      if (location.startsWith(S3_SCHEME + ":")) {
+        result = new URI(location);
+      } else if (location.startsWith("/")) {
+        result = new URI(S3_SCHEME, null, location, null);
+      } else {
+        result = new URI(S3_SCHEME, null, "/" + location, null);
+      }
+      return result;
+    } catch (URISyntaxException ex) {
+      throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, ex);
+    }
+  }
+
+  @Override
+  public URI createDirectoryURI(String location) {
+    if (StringUtils.isEmpty(location)) {
+      throw new IllegalArgumentException("cannot create URI with an empty location");
+    }
+
+    if (!location.endsWith("/")) {
+      location += "/";
+    }
+
+    return createURI(location);
+  }
+
+  @Override
+  public URI resolve(URI baseUri, String... pathComponents) {
+    if (!S3_SCHEME.equalsIgnoreCase(baseUri.getScheme())) {
+      throw new IllegalArgumentException("URI must begin with 's3:' scheme");
+    }
+
+    // If paths contains unnecessary '/' separators, they'll be removed by URI.normalize()
+    String path = baseUri + "/" + String.join("/", pathComponents);
+    return URI.create(path).normalize();
+  }
+
+  @Override
+  public URI resolveDirectory(URI baseUri, String... pathComponents) {
+    if (pathComponents.length > 0) {
+      pathComponents[pathComponents.length - 1] = pathComponents[pathComponents.length - 1] + "/";
+    } else {
+      if (!baseUri.getPath().endsWith("/")) {
+        baseUri = URI.create(baseUri + "/");
+      }
+    }
+    return resolve(baseUri, pathComponents);
+  }
+
+  @Override
+  public void createDirectory(URI path) throws IOException {
+    Objects.requireNonNull(path, "cannot create directory to a null URI");
+
+    String s3Path = getS3Path(path);
+
+    if (log.isDebugEnabled()) {
+      log.debug("Create directory '{}'", s3Path);
+    }
+
+    client.createDirectory(s3Path);
+  }
+
+  @Override
+  public void deleteDirectory(URI path) throws IOException {
+    Objects.requireNonNull(path, "cannot delete directory with a null URI");
+
+    String s3Path = getS3Path(path);
+
+    if (log.isDebugEnabled()) {
+      log.debug("Delete directory '{}'", s3Path);
+    }
+
+    client.deleteDirectory(s3Path);
+  }
+
+  @Override
+  public void delete(URI path, Collection<String> files, boolean ignoreNoSuchFileException)
+      throws IOException {
+    Objects.requireNonNull(path, "cannot delete files without a valid URI path");
+    Objects.requireNonNull(files, "collection of files to delete cannot be null");
+
+    if (log.isDebugEnabled()) {
+      log.debug("Delete files {} from {}", files, getS3Path(path));
+    }
+
+    Set<String> filesToDelete =
+        files.stream()
+            .map(file -> resolve(path, file))
+            .map(S3BackupRepository::getS3Path)
+            .collect(Collectors.toSet());
+
+    try {
+      client.delete(filesToDelete);
+    } catch (S3NotFoundException e) {
+      if (!ignoreNoSuchFileException) {
+        throw e;
+      }
+    }
+  }
+
+  @Override
+  public boolean exists(URI path) throws IOException {
+    Objects.requireNonNull(path, "cannot test for existence of a null URI path");
+
+    String s3Path = getS3Path(path);
+
+    if (log.isDebugEnabled()) {
+      log.debug("Path exists '{}'", s3Path);
+    }
+
+    return client.pathExists(s3Path);
+  }
+
+  @Override
+  public IndexInput openInput(URI path, String fileName, IOContext ctx) throws IOException {
+    Objects.requireNonNull(path, "cannot open a input stream without a valid URI path");
+    if (StringUtils.isEmpty(fileName)) {
+      throw new IllegalArgumentException("need a valid file name to read from S3");
+    }
+
+    URI filePath = resolve(path, fileName);
+    String s3Path = getS3Path(filePath);
+
+    if (log.isDebugEnabled()) {
+      log.debug("Read from S3 '{}'", s3Path);
+    }
+
+    return new S3IndexInput(client.pullStream(s3Path), s3Path, client.length(s3Path));
+  }
+
+  @Override
+  public OutputStream createOutput(URI path) throws IOException {
+    Objects.requireNonNull(path, "cannot write to S3 without a valid URI path");
+
+    String s3Path = getS3Path(path);
+
+    if (log.isDebugEnabled()) {
+      log.debug("Write to S3 '{}'", s3Path);
+    }
+
+    return client.pushStream(s3Path);
+  }
+
+  /**
+   * This method returns all the entries (files and directories) in the specified directory.
+   *
+   * @param path The directory path
+   * @return an array of strings, one for each entry in the directory
+   */
+  @Override
+  public String[] listAll(URI path) throws IOException {
+    String s3Path = getS3Path(path);
+
+    if (log.isDebugEnabled()) {
+      log.debug("listAll for '{}'", s3Path);
+    }
+
+    return client.listDir(s3Path);
+  }
+
+  @Override
+  public PathType getPathType(URI path) throws IOException {
+    String s3Path = getS3Path(path);
+
+    if (log.isDebugEnabled()) {
+      log.debug("getPathType for '{}'", s3Path);
+    }
+
+    return client.isDirectory(s3Path) ? PathType.DIRECTORY : PathType.FILE;
+  }
+
+  /**
+   * Copy an index file from specified <code>sourceDir</code> to the destination repository (i.e.
+   * backup).
+   *
+   * @param sourceDir The source directory hosting the file to be copied.
+   * @param sourceFileName The name of the file to be copied
+   * @param dest The destination backup location.
+   * @throws IOException in case of errors
+   * @throws CorruptIndexException in case checksum of the file does not match with precomputed
+   *     checksum stored at the end of the file
+   */
+  @Override
+  public void copyIndexFileFrom(
+      Directory sourceDir, String sourceFileName, URI dest, String destFileName)
+      throws IOException {
+    if (StringUtils.isEmpty(sourceFileName)) {
+      throw new IllegalArgumentException("must have a valid source file name to copy");
+    }
+    if (StringUtils.isEmpty(destFileName)) {
+      throw new IllegalArgumentException("must have a valid destination file name to copy");
+    }
+
+    URI filePath = resolve(dest, destFileName);
+    String s3Path = getS3Path(filePath);
+    Instant start = Instant.now();
+    if (log.isDebugEnabled()) {
+      log.debug("Upload started to S3 '{}'", s3Path);
+    }
+
+    try (ChecksumIndexInput indexInput =
+        sourceDir.openChecksumInput(sourceFileName, DirectoryFactory.IOCONTEXT_NO_CACHE)) {
+      if (indexInput.length() <= CodecUtil.footerLength()) {
+        throw new CorruptIndexException("file is too small:" + indexInput.length(), indexInput);
+      }
+
+      client.createDirectory(getS3Path(dest));
+      try (OutputStream outputStream = client.pushStream(s3Path)) {
+
+        byte[] buffer = new byte[CHUNK_SIZE];
+        int bufferLen;
+        long remaining = indexInput.length() - CodecUtil.footerLength();
+
+        while (remaining > 0) {
+          bufferLen = remaining >= CHUNK_SIZE ? CHUNK_SIZE : (int) remaining;
+
+          indexInput.readBytes(buffer, 0, bufferLen);
+          outputStream.write(buffer, 0, bufferLen);
+          remaining -= bufferLen;
+        }
+        final long checksum = CodecUtil.checkFooter(indexInput);
+        writeFooter(checksum, outputStream);
+      }
+    }
+
+    long timeElapsed = Duration.between(start, Instant.now()).toMillis();
+    if (log.isInfoEnabled()) {
+      log.info("Upload to S3: '{}' finished in {}ms", s3Path, timeElapsed);
+    }
+  }
+
+  /**
+   * Copy an index file from specified <code>sourceRepo</code> to the destination directory (i.e.
+   * restore).
+   *
+   * @param sourceDir The source URI hosting the file to be copied.
+   * @param dest The destination where the file should be copied.
+   * @throws IOException in case of errors.
+   */
+  @Override
+  public void copyIndexFileTo(
+      URI sourceDir, String sourceFileName, Directory dest, String destFileName)
+      throws IOException {
+    if (StringUtils.isEmpty(sourceFileName)) {
+      throw new IllegalArgumentException("must have a valid source file name to copy");
+    }
+    if (StringUtils.isEmpty(destFileName)) {
+      throw new IllegalArgumentException("must have a valid destination file name to copy");
+    }
+
+    URI filePath = resolve(sourceDir, sourceFileName);
+    String s3Path = getS3Path(filePath);
+    Instant start = Instant.now();
+    if (log.isDebugEnabled()) {
+      log.debug("Download started from S3 '{}'", s3Path);
+    }
+
+    try (InputStream inputStream = client.pullStream(s3Path);
+        IndexOutput indexOutput = dest.createOutput(destFileName, IOContext.DEFAULT)) {
+      byte[] buffer = new byte[CHUNK_SIZE];
+      int len;
+      while ((len = inputStream.read(buffer)) != -1) {
+        indexOutput.writeBytes(buffer, 0, len);
+      }
+    }
+
+    long timeElapsed = Duration.between(start, Instant.now()).toMillis();
+
+    if (log.isInfoEnabled()) {
+      log.info("Download from S3 '{}' finished in {}ms", s3Path, timeElapsed);
+    }
+  }
+
+  @Override
+  public void close() {
+    client.close();
+  }
+
+  /** Return the path to use in S3. */
+  private static String getS3Path(URI uri) {
+    // Depending on the scheme, the first element may be the host. Following ones are the path
+    String host = uri.getHost();
+    return host == null ? uri.getPath() : host + uri.getPath();
+  }
+
+  private void writeFooter(long checksum, OutputStream outputStream) throws IOException {
+    IndexOutput out =
+        new IndexOutput("", "") {
+          @Override
+          public void writeByte(byte b) throws IOException {
+            outputStream.write(b);
+          }
+
+          @Override
+          public void writeBytes(byte[] b, int offset, int length) throws IOException {
+            outputStream.write(b, offset, length);
+          }
+
+          @Override
+          public void close() {}
+
+          @Override
+          public long getFilePointer() {
+            return 0;
+          }
+
+          @Override
+          public long getChecksum() {
+            return checksum;
+          }
+        };
+    CodecUtil.writeFooter(out);
+  }
+}
diff --git a/solr/contrib/s3-repository/src/java/org/apache/solr/s3/S3BackupRepositoryConfig.java b/solr/contrib/s3-repository/src/java/org/apache/solr/s3/S3BackupRepositoryConfig.java
new file mode 100644
index 0000000..04b7afe
--- /dev/null
+++ b/solr/contrib/s3-repository/src/java/org/apache/solr/s3/S3BackupRepositoryConfig.java
@@ -0,0 +1,88 @@
+/*
+ * 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.solr.s3;
+
+import java.util.Locale;
+import org.apache.solr.common.util.NamedList;
+
+/**
+ * Class representing the {@code backup} S3 config bundle specified in solr.xml. All user-provided
+ * config can be overridden via environment variables (use uppercase, with '_' instead of '.'), see
+ * {@link S3BackupRepositoryConfig#toEnvVar}.
+ */
+public class S3BackupRepositoryConfig {
+
+  public static final String BUCKET_NAME = "s3.bucket.name";
+  public static final String REGION = "s3.region";
+  public static final String ENDPOINT = "s3.endpoint";
+  public static final String PROXY_HOST = "s3.proxy.host";
+  public static final String PROXY_PORT = "s3.proxy.port";
+
+  private final String bucketName;
+  private final String region;
+  private final String proxyHost;
+  private final int proxyPort;
+  private final String endpoint;
+
+  public S3BackupRepositoryConfig(NamedList<?> config) {
+    region = getStringConfig(config, REGION);
+    bucketName = getStringConfig(config, BUCKET_NAME);
+    proxyHost = getStringConfig(config, PROXY_HOST);
+    proxyPort = getIntConfig(config, PROXY_PORT);
+    endpoint = getStringConfig(config, ENDPOINT);
+  }
+
+  /** Construct a {@link S3StorageClient} from the provided config. */
+  public S3StorageClient buildClient() {
+    return new S3StorageClient(bucketName, region, proxyHost, proxyPort, endpoint);
+  }
+
+  private static String getStringConfig(NamedList<?> config, String property) {
+    String envProp = System.getenv().get(toEnvVar(property));
+    if (envProp == null) {
+      Object configProp = config.get(property);
+      return configProp == null ? null : configProp.toString();
+    } else {
+      return envProp;
+    }
+  }
+
+  private static int getIntConfig(NamedList<?> config, String property) {
+    String envProp = System.getenv().get(toEnvVar(property));
+    if (envProp == null) {
+      Object configProp = config.get(property);
+      return configProp instanceof Integer ? (int) configProp : 0;
+    } else {
+      return Integer.parseInt(envProp);
+    }
+  }
+
+  /** If the property as any other value than 'true' or 'TRUE', this will default to false. */
+  private static boolean getBooleanConfig(NamedList<?> config, String property) {
+    String envProp = System.getenv().get(toEnvVar(property));
+    if (envProp == null) {
+      Boolean configProp = config.getBooleanArg(property);
+      return configProp != null && configProp;
+    } else {
+      return Boolean.parseBoolean(envProp);
+    }
+  }
+
+  private static String toEnvVar(String property) {
+    return property.toUpperCase(Locale.ROOT).replace('.', '_');
+  }
+}
diff --git a/solr/contrib/s3-repository/src/java/org/apache/solr/s3/S3Exception.java b/solr/contrib/s3-repository/src/java/org/apache/solr/s3/S3Exception.java
new file mode 100644
index 0000000..2c1f081
--- /dev/null
+++ b/solr/contrib/s3-repository/src/java/org/apache/solr/s3/S3Exception.java
@@ -0,0 +1,38 @@
+/*
+ * 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.solr.s3;
+
+import java.io.IOException;
+
+/**
+ * Generic exception for S3 related failures. Could originate from the {@link S3BackupRepository} or
+ * from its underlying {@link S3StorageClient}.
+ */
+public class S3Exception extends IOException {
+
+  public S3Exception(Throwable cause) {
+    super(cause);
+  }
+
+  public S3Exception(String message) {
+    super(message);
+  }
+
+  public S3Exception(String message, Throwable cause) {
+    super(message, cause);
+  }
+}
diff --git a/solr/contrib/s3-repository/src/java/org/apache/solr/s3/S3IndexInput.java b/solr/contrib/s3-repository/src/java/org/apache/solr/s3/S3IndexInput.java
new file mode 100644
index 0000000..b984f98
--- /dev/null
+++ b/solr/contrib/s3-repository/src/java/org/apache/solr/s3/S3IndexInput.java
@@ -0,0 +1,125 @@
+/*
+ * 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.solr.s3;
+
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.util.Locale;
+import org.apache.lucene.store.BufferedIndexInput;
+
+class S3IndexInput extends BufferedIndexInput {
+
+  static final int LOCAL_BUFFER_SIZE = 16 * 1024;
+
+  private final InputStream inputStream;
+  private final long length;
+
+  private long position;
+
+  S3IndexInput(InputStream inputStream, String path, long length) {
+    super(path);
+
+    this.inputStream = inputStream;
+    this.length = length;
+  }
+
+  @Override
+  protected void readInternal(ByteBuffer b) throws IOException {
+
+    int expectedLength = b.remaining();
+
+    byte[] localBuffer;
+    if (b.hasArray()) {
+      localBuffer = b.array();
+    } else {
+      localBuffer = new byte[LOCAL_BUFFER_SIZE];
+    }
+
+    // We have no guarantee we read all the requested bytes from the underlying InputStream
+    // in a single call. Loop until we reached the requested number of bytes.
+    while (b.hasRemaining()) {
+      int read;
+
+      if (b.hasArray()) {
+        read = inputStream.read(localBuffer, b.arrayOffset() + b.position(), b.remaining());
+      } else {
+        read = inputStream.read(localBuffer, 0, Math.min(b.remaining(), LOCAL_BUFFER_SIZE));
+      }
+
+      // Abort if we can't read any more data
+      if (read < 0) {
+        break;
+      }
+
+      if (b.hasArray()) {
+        b.position(b.position() + read);
+      } else {
+        b.put(localBuffer, 0, read);
+      }
+    }
+
+    if (b.remaining() > 0) {
+      throw new IOException(
+          String.format(
+              Locale.ROOT,
+              "Failed to read %d bytes; only %d available",
+              expectedLength,
+              (expectedLength - b.remaining())));
+    }
+
+    position += expectedLength;
+  }
+
+  @Override
+  protected void seekInternal(long toPosition) throws IOException {
+    if (toPosition > length()) {
+      throw new EOFException(
+          "read past EOF: pos=" + toPosition + " vs length=" + length() + ": " + this);
+    }
+
+    // If we seek forward, skip unread bytes
+    while (this.position < toPosition) {
+      long skipped = inputStream.skip(toPosition - this.position);
+      if (skipped == 0) {
+        // If we didn't skip any bytes, make sure we are not at the end of the file
+        if (inputStream.read() == -1) {
+          // We are at the end of the file
+          break;
+        } else {
+          // Not at the end of the file, and we did skip one byte with the read()
+          skipped = 1;
+        }
+      }
+      this.position += skipped;
+    }
+    if (this.position > toPosition) {
+      throw new IOException("Cannot seek backward");
+    }
+  }
+
+  @Override
+  public final long length() {
+    return length;
+  }
+
+  @Override
+  public void close() throws IOException {
+    this.inputStream.close();
+  }
+}
diff --git a/solr/contrib/s3-repository/src/java/org/apache/solr/s3/S3NotFoundException.java b/solr/contrib/s3-repository/src/java/org/apache/solr/s3/S3NotFoundException.java
new file mode 100644
index 0000000..92f6ea7
--- /dev/null
+++ b/solr/contrib/s3-repository/src/java/org/apache/solr/s3/S3NotFoundException.java
@@ -0,0 +1,36 @@
+/*
+ * 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.solr.s3;
+
+/**
+ * Specific exception thrown from {@link S3StorageClient}s when the resource requested is not found
+ * (e.g., attempting to fetch a key in S3 that doesn't exist).
+ */
+public class S3NotFoundException extends S3Exception {
+
+  public S3NotFoundException(Throwable cause) {
+    super(cause);
+  }
+
+  public S3NotFoundException(String message) {
+    super(message);
+  }
+
+  public S3NotFoundException(String message, Throwable cause) {
+    super(message, cause);
+  }
+}
diff --git a/solr/contrib/s3-repository/src/java/org/apache/solr/s3/S3OutputStream.java b/solr/contrib/s3-repository/src/java/org/apache/solr/s3/S3OutputStream.java
new file mode 100644
index 0000000..ded053f
--- /dev/null
+++ b/solr/contrib/s3-repository/src/java/org/apache/solr/s3/S3OutputStream.java
@@ -0,0 +1,263 @@
+/*
+ * 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.solr.s3;
+
+import com.amazonaws.AmazonClientException;
+import com.amazonaws.event.ProgressEvent;
+import com.amazonaws.event.SyncProgressListener;
+import com.amazonaws.services.s3.AmazonS3;
+import com.amazonaws.services.s3.model.AbortMultipartUploadRequest;
+import com.amazonaws.services.s3.model.CompleteMultipartUploadRequest;
+import com.amazonaws.services.s3.model.InitiateMultipartUploadRequest;
+import com.amazonaws.services.s3.model.ObjectMetadata;
+import com.amazonaws.services.s3.model.PartETag;
+import com.amazonaws.services.s3.model.UploadPartRequest;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.invoke.MethodHandles;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Implementation is adapted from
+ * https://github.com/confluentinc/kafka-connect-storage-cloud/blob/5.0.x/kafka-connect-s3/src/main/java/io/confluent/connect/s3/storage/S3OutputStream.java,
+ * which uses ASLv2.
+ *
+ * <p>More recent versions of the kafka-connect-storage-cloud implementation use the CCL license,
+ * but this class was based off of the ASLv2 version.
+ */
+public class S3OutputStream extends OutputStream {
+  private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+  // 16 MB. Part sizes must be between 5MB to 5GB.
+  // https://docs.aws.amazon.com/AmazonS3/latest/dev/qfacts.html
+  static final int PART_SIZE = 16777216;
+  static final int MIN_PART_SIZE = 5242880;
+
+  private final AmazonS3 s3Client;
+  private final String bucketName;
+  private final String key;
+  private final SyncProgressListener progressListener;
+  private volatile boolean closed;
+  private final ByteBuffer buffer;
+  private MultipartUpload multiPartUpload;
+
+  public S3OutputStream(AmazonS3 s3Client, String key, String bucketName) {
+    this.s3Client = s3Client;
+    this.bucketName = bucketName;
+    this.key = key;
+    this.closed = false;
+    this.buffer = ByteBuffer.allocate(PART_SIZE);
+    this.progressListener = new ConnectProgressListener();
+    this.multiPartUpload = null;
+
+    if (log.isDebugEnabled()) {
+      log.debug("Created S3OutputStream for bucketName '{}' key '{}'", bucketName, key);
+    }
+  }
+
+  @Override
+  public void write(int b) throws IOException {
+    if (closed) {
+      throw new IOException("Stream closed");
+    }
+
+    buffer.put((byte) b);
+
+    // If the buffer is now full, push it to remote S3.
+    if (!buffer.hasRemaining()) {
+      uploadPart(false);
+    }
+  }
+
+  @Override
+  public void write(byte[] b, int off, int len) throws IOException {
+    if (closed) {
+      throw new IOException("Stream closed");
+    }
+
+    if (outOfRange(off, b.length) || len < 0 || outOfRange(off + len, b.length)) {
+      throw new IndexOutOfBoundsException();
+    } else if (len == 0) {
+      return;
+    }
+
+    int currentOffset = off;
+    int lenRemaining = len;
+    while (buffer.remaining() < lenRemaining) {
+      int firstPart = buffer.remaining();
+      buffer.put(b, currentOffset, firstPart);
+      uploadPart(false);
+
+      currentOffset += firstPart;
+      lenRemaining -= firstPart;
+    }
+    if (lenRemaining > 0) {
+      buffer.put(b, currentOffset, lenRemaining);
+    }
+  }
+
+  private static boolean outOfRange(int off, int len) {
+    return off < 0 || off > len;
+  }
+
+  private void uploadPart(boolean isLastPart) throws IOException {
+
+    int size = buffer.position();
+
+    if (size == 0) {
+      // nothing to upload
+      return;
+    }
+
+    if (multiPartUpload == null) {
+      if (log.isDebugEnabled()) {
+        log.debug("New multi-part upload for bucketName '{}' key '{}'", bucketName, key);
+      }
+      multiPartUpload = newMultipartUpload();
+    }
+    try {
+      multiPartUpload.uploadPart(new ByteArrayInputStream(buffer.array()), size, isLastPart);
+    } catch (Exception e) {
+      if (multiPartUpload != null) {
+        multiPartUpload.abort();
+        if (log.isDebugEnabled()) {
+          log.debug("Multipart upload aborted for bucketName '{}' key '{}'.", bucketName, key);
+        }
+      }
+      throw new S3Exception("Part upload failed: ", e);
+    }
+
+    // reset the buffer for eventual next write operation
+    buffer.clear();
+  }
+
+  @Override
+  public void flush() throws IOException {
+    if (closed) {
+      throw new IOException("Stream closed");
+    }
+
+    // Flush is possible only if we have more data than the required part size
+    // If buffer size is lower than than, just skip
+    if (buffer.position() >= MIN_PART_SIZE) {
+      uploadPart(false);
+    }
+  }
+
+  @Override
+  public void close() throws IOException {
+    if (closed) {
+      return;
+    }
+
+    // flush first
+    uploadPart(true);
+
+    if (multiPartUpload != null) {
+      multiPartUpload.complete();
+      multiPartUpload = null;
+    }
+
+    closed = true;
+  }
+
+  private MultipartUpload newMultipartUpload() throws IOException {
+    InitiateMultipartUploadRequest initRequest =
+        new InitiateMultipartUploadRequest(bucketName, key, new ObjectMetadata());
+
+    try {
+      return new MultipartUpload(s3Client.initiateMultipartUpload(initRequest).getUploadId());
+    } catch (AmazonClientException e) {
+      throw S3StorageClient.handleAmazonException(e);
+    }
+  }
+
+  // Placeholder listener for now, just logs the event progress.
+  private static class ConnectProgressListener extends SyncProgressListener {
+    public void progressChanged(ProgressEvent progressEvent) {
+      if (log.isDebugEnabled()) {
+        log.debug("Progress event {}", progressEvent);
+      }
+    }
+  }
+
+  private class MultipartUpload {
+    private final String uploadId;
+    private final List<PartETag> partETags;
+
+    public MultipartUpload(String uploadId) {
+      this.uploadId = uploadId;
+      this.partETags = new ArrayList<>();
+      if (log.isDebugEnabled()) {
+        log.debug(
+            "Initiated multi-part upload for bucketName '{}' key '{}' with id '{}'",
+            bucketName,
+            key,
+            uploadId);
+      }
+    }
+
+    void uploadPart(ByteArrayInputStream inputStream, int partSize, boolean isLastPart) {
+      int currentPartNumber = partETags.size() + 1;
+
+      UploadPartRequest request =
+          new UploadPartRequest()
+              .withKey(key)
+              .withBucketName(bucketName)
+              .withUploadId(uploadId)
+              .withInputStream(inputStream)
+              .withPartNumber(currentPartNumber)
+              .withPartSize(partSize)
+              .withLastPart(isLastPart)
+              .withGeneralProgressListener(progressListener);
+
+      if (log.isDebugEnabled()) {
+        log.debug("Uploading part {} for id '{}'", currentPartNumber, uploadId);
+      }
+      partETags.add(s3Client.uploadPart(request).getPartETag());
+    }
+
+    /** To be invoked when closing the stream to mark upload is done. */
+    void complete() {
+      if (log.isDebugEnabled()) {
+        log.debug("Completing multi-part upload for key '{}', id '{}'", key, uploadId);
+      }
+      CompleteMultipartUploadRequest completeRequest =
+          new CompleteMultipartUploadRequest(bucketName, key, uploadId, partETags);
+      s3Client.completeMultipartUpload(completeRequest);
+    }
+
+    public void abort() {
+      if (log.isWarnEnabled()) {
+        log.warn("Aborting multi-part upload with id '{}'", uploadId);
+      }
+      try {
+        s3Client.abortMultipartUpload(new AbortMultipartUploadRequest(bucketName, key, uploadId));
+      } catch (Exception e) {
+        // ignoring failure on abort.
+        if (log.isWarnEnabled()) {
+          log.warn("Unable to abort multipart upload, you may need to purge uploaded parts: ", e);
+        }
+      }
+    }
+  }
+}
diff --git a/solr/contrib/s3-repository/src/java/org/apache/solr/s3/S3StorageClient.java b/solr/contrib/s3-repository/src/java/org/apache/solr/s3/S3StorageClient.java
new file mode 100644
index 0000000..a9b7cc7
--- /dev/null
+++ b/solr/contrib/s3-repository/src/java/org/apache/solr/s3/S3StorageClient.java
@@ -0,0 +1,561 @@
+/*
+ * 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.solr.s3;
+
+import com.amazonaws.AmazonClientException;
+import com.amazonaws.AmazonServiceException;
+import com.amazonaws.ClientConfiguration;
+import com.amazonaws.Protocol;
+import com.amazonaws.client.builder.AwsClientBuilder;
+import com.amazonaws.services.s3.AmazonS3;
+import com.amazonaws.services.s3.AmazonS3ClientBuilder;
+import com.amazonaws.services.s3.model.DeleteObjectsRequest;
+import com.amazonaws.services.s3.model.DeleteObjectsRequest.KeyVersion;
+import com.amazonaws.services.s3.model.DeleteObjectsResult;
+import com.amazonaws.services.s3.model.ListObjectsRequest;
+import com.amazonaws.services.s3.model.ObjectListing;
+import com.amazonaws.services.s3.model.ObjectMetadata;
+import com.amazonaws.services.s3.model.PutObjectRequest;
+import com.amazonaws.services.s3.model.S3Object;
+import com.amazonaws.services.s3.model.S3ObjectSummary;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.Lists;
+import java.io.Closeable;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.invoke.MethodHandles;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+import java.util.stream.Collectors;
+import org.apache.commons.io.input.ClosedInputStream;
+import org.apache.curator.shaded.com.google.common.collect.Sets;
+import org.apache.solr.common.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Creates a {@link AmazonS3} for communicating with AWS S3. Utilizes the default credential
+ * provider chain; reference <a
+ * href="https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html">AWS SDK
+ * docs</a> for details on where this client will fetch credentials from, and the order of
+ * precedence.
+ */
+public class S3StorageClient {
+
+  private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+  static final String S3_FILE_PATH_DELIMITER = "/";
+
+  // S3 has a hard limit of 1000 keys per batch delete request
+  private static final int MAX_KEYS_PER_BATCH_DELETE = 1000;
+
+  // Metadata name used to identify flag directory entries in S3
+  private static final String S3_DIR_CONTENT_TYPE = "application/x-directory";
+
+  // Error messages returned by S3 for a key not found.
+  private static final Set<String> NOT_FOUND_CODES = Sets.newHashSet("NoSuchKey", "404 Not Found");
+
+  private final AmazonS3 s3Client;
+
+  // The S3 bucket where we read/write all data.
+  private final String bucketName;
+
+  S3StorageClient(
+      String bucketName, String region, String proxyHost, int proxyPort, String endpoint) {
+    this(createInternalClient(region, proxyHost, proxyPort, endpoint), bucketName);
+  }
+
+  @VisibleForTesting
+  S3StorageClient(AmazonS3 s3Client, String bucketName) {
+    this.s3Client = s3Client;
+    this.bucketName = bucketName;
+  }
+
+  private static AmazonS3 createInternalClient(
+      String region, String proxyHost, int proxyPort, String endpoint) {
+    ClientConfiguration clientConfig = new ClientConfiguration().withProtocol(Protocol.HTTPS);
+
+    // If configured, add proxy
+    if (!StringUtils.isEmpty(proxyHost)) {
+      clientConfig.setProxyHost(proxyHost);
+      if (proxyPort > 0) {
+        clientConfig.setProxyPort(proxyPort);
+      }
+    }
+
+    /*
+     * Default s3 client builder loads credentials from disk and handles token refreshes
+     */
+    AmazonS3ClientBuilder clientBuilder =
+        AmazonS3ClientBuilder.standard()
+            .enablePathStyleAccess()
+            .withClientConfiguration(clientConfig);
+
+    if (!StringUtils.isEmpty(endpoint)) {
+      clientBuilder.setEndpointConfiguration(
+          new AwsClientBuilder.EndpointConfiguration(endpoint, region));
+    } else {
+      clientBuilder.setRegion(region);
+    }
+
+    return clientBuilder.build();
+  }
+
+  /** Create a directory in S3. */
+  void createDirectory(String path) throws S3Exception {
+    path = sanitizedDirPath(path);
+
+    if (!parentDirectoryExist(path)) {
+      createDirectory(getParentDirectory(path));
+      // TODO see https://issues.apache.org/jira/browse/SOLR-15359
+      //            throw new S3Exception("Parent directory doesn't exist, path=" + path);
+    }
+
+    ObjectMetadata objectMetadata = new ObjectMetadata();
+    objectMetadata.setContentType(S3_DIR_CONTENT_TYPE);
+    objectMetadata.setContentLength(0);
+
+    // Create empty object with header
+    final InputStream im = ClosedInputStream.CLOSED_INPUT_STREAM;
+
+    try {
+      PutObjectRequest putRequest = new PutObjectRequest(bucketName, path, im, objectMetadata);
+      s3Client.putObject(putRequest);
+    } catch (AmazonClientException ase) {
+      throw handleAmazonException(ase);
+    }
+  }
+
+  /**
+   * Delete files from S3. Deletion order is not guaranteed.
+   *
+   * @throws S3NotFoundException if the number of deleted objects does not match {@code entries}
+   *     size
+   */
+  void delete(Collection<String> paths) throws S3Exception {
+    Set<String> entries = new HashSet<>();
+    for (String path : paths) {
+      entries.add(sanitizedFilePath(path));
+    }
+
+    Collection<String> deletedPaths = deleteObjects(entries);
+
+    // If we haven't deleted all requested objects, assume that's because some were missing
+    if (entries.size() != deletedPaths.size()) {
+      Set<String> notDeletedPaths = new HashSet<>(entries);
+      entries.removeAll(deletedPaths);
+      throw new S3NotFoundException(notDeletedPaths.toString());
+    }
+  }
+
+  /**
+   * Delete directory, all the files and sub-directories from S3.
+   *
+   * @param path Path to directory in S3.
+   */
+  void deleteDirectory(String path) throws S3Exception {
+    path = sanitizedDirPath(path);
+
+    Set<String> entries = new HashSet<>();
+    if (pathExists(path)) {
+      entries.add(path);
+    }
+
+    // Get all the files and subdirectories
+    entries.addAll(listAll(path));
+
+    deleteObjects(entries);
+  }
+
+  /**
+   * List all the files and sub-directories directly under given path.
+   *
+   * @param path Path to directory in S3.
+   * @return Files and sub-directories in path.
+   */
+  String[] listDir(String path) throws S3Exception {
+    path = sanitizedDirPath(path);
+
+    String prefix = path;
+    ListObjectsRequest listRequest =
+        new ListObjectsRequest()
+            .withBucketName(bucketName)
+            .withPrefix(prefix)
+            .withDelimiter(S3_FILE_PATH_DELIMITER);
+
+    List<String> entries = new ArrayList<>();
+    try {
+      ObjectListing objectListing = s3Client.listObjects(listRequest);
+
+      while (true) {
+        List<String> files =
+            objectListing.getObjectSummaries().stream()
+                .map(S3ObjectSummary::getKey)
+                .collect(Collectors.toList());
+        files.addAll(objectListing.getCommonPrefixes());
+        // This filtering is needed only for S3mock. Real S3 does not ignore the trailing '/' in the
+        // prefix.
+        files =
+            files.stream()
+                .filter(s -> s.startsWith(prefix))
+                .map(s -> s.substring(prefix.length()))
+                .filter(s -> !s.isEmpty())
+                .filter(
+                    s -> {
+                      int slashIndex = s.indexOf(S3_FILE_PATH_DELIMITER);
+                      return slashIndex == -1 || slashIndex == s.length() - 1;
+                    })
+                .map(
+                    s -> {
+                      if (s.endsWith(S3_FILE_PATH_DELIMITER)) {
+                        return s.substring(0, s.length() - 1);
+                      }
+                      return s;
+                    })
+                .collect(Collectors.toList());
+
+        entries.addAll(files);
+
+        if (objectListing.isTruncated()) {
+          objectListing = s3Client.listNextBatchOfObjects(objectListing);
+        } else {
+          break;
+        }
+      }
+      return entries.toArray(new String[0]);
+    } catch (AmazonClientException ase) {
+      throw handleAmazonException(ase);
+    }
+  }
+
+  /**
+   * Check if path exists.
+   *
+   * @param path to File/Directory in S3.
+   * @return true if path exists, otherwise false?
+   */
+  boolean pathExists(String path) throws S3Exception {
+    path = sanitizedPath(path);
+
+    // for root return true
+    if (path.isEmpty() || S3_FILE_PATH_DELIMITER.equals(path)) {
+      return true;
+    }
+
+    try {
+      return s3Client.doesObjectExist(bucketName, path);
+    } catch (AmazonClientException ase) {
+      throw handleAmazonException(ase);
+    }
+  }
+
+  /**
+   * Check if path is directory.
+   *
+   * @param path to File/Directory in S3.
+   * @return true if path is directory, otherwise false.
+   */
+  boolean isDirectory(String path) throws S3Exception {
+    path = sanitizedDirPath(path);
+
+    try {
+      ObjectMetadata objectMetadata = s3Client.getObjectMetadata(bucketName, path);
+      String contentType = objectMetadata.getContentType();
+
+      return !StringUtils.isEmpty(contentType) && contentType.equalsIgnoreCase(S3_DIR_CONTENT_TYPE);
+    } catch (AmazonClientException ase) {
+      throw handleAmazonException(ase);
+    }
+  }
+
+  /**
+   * Get length of file in bytes.
+   *
+   * @param path to file in S3.
+   * @return length of file.
+   */
+  long length(String path) throws S3Exception {
+    path = sanitizedFilePath(path);
+    try {
+      ObjectMetadata objectMetadata = s3Client.getObjectMetadata(bucketName, path);
+      String contentType = objectMetadata.getContentType();
+
+      if (StringUtils.isEmpty(contentType) || !contentType.equalsIgnoreCase(S3_DIR_CONTENT_TYPE)) {
+        return objectMetadata.getContentLength();
+      }
+      throw new S3Exception("Path is Directory");
+    } catch (AmazonClientException ase) {
+      throw handleAmazonException(ase);
+    }
+  }
+
+  /**
+   * Open a new {@link InputStream} to file for read. Caller needs to close the stream.
+   *
+   * @param path to file in S3.
+   * @return InputStream for file.
+   */
+  InputStream pullStream(String path) throws S3Exception {
+    path = sanitizedFilePath(path);
+
+    try {
+      S3Object requestedObject = s3Client.getObject(bucketName, path);
+      // This InputStream instance needs to be closed by the caller
+      return requestedObject.getObjectContent();
+    } catch (AmazonClientException ase) {
+      throw handleAmazonException(ase);
+    }
+  }
+
+  /**
+   * Open a new {@link OutputStream} to file for write. Caller needs to close the stream.
+   *
+   * @param path to file in S3.
+   * @return OutputStream for file.
+   */
+  OutputStream pushStream(String path) throws S3Exception {
+    path = sanitizedFilePath(path);
+
+    if (!parentDirectoryExist(path)) {
+      throw new S3Exception("Parent directory doesn't exist of path: " + path);
+    }
+
+    try {
+      return new S3OutputStream(s3Client, path, bucketName);
+    } catch (AmazonClientException ase) {
+      throw handleAmazonException(ase);
+    }
+  }
+
+  /** Override {@link Closeable} since we throw no exception. */
+  void close() {
+    s3Client.shutdown();
+  }
+
+  /** Any file path that specifies a non-existent file will not be treated as an error. */
+  private Collection<String> deleteObjects(Collection<String> paths) throws S3Exception {
+    try {
+      /*
+       * Per the S3 docs:
+       * https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/DeleteObjectsResult.html
+       * An exception is thrown if there's a client error processing the request or in S3 itself.
+       * However, there's no guarantee the delete did not happen if an exception is thrown.
+       */
+      return deleteObjects(paths, MAX_KEYS_PER_BATCH_DELETE);
+    } catch (AmazonClientException ase) {
+      throw handleAmazonException(ase);
+    }
+  }
+
+  /**
+   * Batch deletes from S3.
+   *
+   * @param entries collection of S3 keys of the files to be deleted.
+   * @param batchSize number of deletes to send to S3 at a time
+   */
+  @VisibleForTesting
+  Collection<String> deleteObjects(Collection<String> entries, int batchSize) throws S3Exception {
+    List<KeyVersion> keysToDelete =
+        entries.stream().map(KeyVersion::new).collect(Collectors.toList());
+
+    keysToDelete.sort(Comparator.comparing(KeyVersion::getKey).reversed());
+    List<List<KeyVersion>> partitions = Lists.partition(keysToDelete, batchSize);
+    Set<String> deletedPaths = new HashSet<>();
+
+    boolean deleteIndividually = false;
+    for (List<KeyVersion> partition : partitions) {
+      DeleteObjectsRequest request = createBatchDeleteRequest(partition);
+
+      try {
+        DeleteObjectsResult result = s3Client.deleteObjects(request);
+
+        result.getDeletedObjects().stream()
+            .map(DeleteObjectsResult.DeletedObject::getKey)
+            .forEach(deletedPaths::add);
+      } catch (AmazonServiceException e) {
+        // This means that the batch-delete is not implemented by this S3 server
+        if (e.getStatusCode() == 501) {
+          deleteIndividually = true;
+          break;
+        } else {
+          throw e;
+        }
+      }
+    }
+
+    if (deleteIndividually) {
+      for (KeyVersion k : keysToDelete) {
+        try {
+          s3Client.deleteObject(bucketName, k.getKey());
+          deletedPaths.add(k.getKey());
+        } catch (AmazonClientException e) {
+          throw new S3Exception("Could not delete object with key: " + k.getKey(), e);
+        }
+      }
+    }
+
+    return deletedPaths;
+  }
+
+  private DeleteObjectsRequest createBatchDeleteRequest(List<KeyVersion> keysToDelete) {
+    return new DeleteObjectsRequest(bucketName).withKeys(keysToDelete);
+  }
+
+  private List<String> listAll(String path) throws S3Exception {
+    String prefix = sanitizedDirPath(path);
+    ListObjectsRequest listRequest =
+        new ListObjectsRequest().withBucketName(bucketName).withPrefix(prefix);
+
+    List<String> entries = new ArrayList<>();
+    try {
+      ObjectListing objectListing = s3Client.listObjects(listRequest);
+
+      while (true) {
+        List<String> files =
+            objectListing.getObjectSummaries().stream()
+                .map(S3ObjectSummary::getKey)
+                // This filtering is needed only for S3mock. Real S3 does not ignore the trailing
+                // '/' in the prefix.
+                .filter(s -> s.startsWith(prefix))
+                .collect(Collectors.toList());
+
+        entries.addAll(files);
+
+        if (objectListing.isTruncated()) {
+          objectListing = s3Client.listNextBatchOfObjects(objectListing);
+        } else {
+          break;
+        }
+      }
+      return entries;
+    } catch (AmazonClientException ase) {
+      throw handleAmazonException(ase);
+    }
+  }
+
+  private boolean parentDirectoryExist(String path) throws S3Exception {
+    // Get the last non-slash character of the string, to find the parent directory
+    String parentDirectory = getParentDirectory(path);
+
+    // If we have no specific parent directory, we consider parent is root (and always exists)
+    if (parentDirectory.isEmpty() || parentDirectory.equals(S3_FILE_PATH_DELIMITER)) {
+      return true;
+    }
+
+    return pathExists(parentDirectory);
+  }
+
+  private String getParentDirectory(String path) {
+    if (!path.contains(S3_FILE_PATH_DELIMITER)) {
+      return "";
+    }
+
+    // Get the last non-slash character of the string, to find the parent directory
+    int fromEnd = path.length() - 1;
+    if (path.endsWith(S3_FILE_PATH_DELIMITER)) {
+      fromEnd -= 1;
+    }
+    return fromEnd > 0
+        ? path.substring(0, path.lastIndexOf(S3_FILE_PATH_DELIMITER, fromEnd) + 1)
+        : S3_FILE_PATH_DELIMITER;
+  }
+
+  /** Ensures path adheres to some rules: -Doesn't start with a leading slash */
+  String sanitizedPath(String path) throws S3Exception {
+    // Trim space from start and end
+    String sanitizedPath = path.trim();
+
+    // Path should start with file delimiter
+    if (sanitizedPath.startsWith(S3_FILE_PATH_DELIMITER)) {
+      // throw new S3Exception("Invalid Path. Path needs to start with '/'");
+      sanitizedPath = sanitizedPath.substring(1).trim();
+    }
+
+    return sanitizedPath;
+  }
+
+  /**
+   * Ensures file path adheres to some rules: -Overall Path rules from `sanitizedPath` -Throw an
+   * error if it ends with a trailing slash
+   */
+  String sanitizedFilePath(String path) throws S3Exception {
+    // Trim space from start and end
+    String sanitizedPath = sanitizedPath(path);
+
+    if (sanitizedPath.endsWith(S3_FILE_PATH_DELIMITER)) {
+      throw new S3Exception("Invalid Path. Path for file can't end with '/'");
+    }
+
+    if (sanitizedPath.isEmpty()) {
+      throw new S3Exception("Invalid Path. Path cannot be empty");
+    }
+
+    return sanitizedPath;
+  }
+
+  /**
+   * Ensures directory path adheres to some rules: -Overall Path rules from `sanitizedPath` -Add a
+   * trailing slash if one does not exist
+   */
+  String sanitizedDirPath(String path) throws S3Exception {
+    // Trim space from start and end
+    String sanitizedPath = sanitizedPath(path);
+
+    if (!sanitizedPath.endsWith(S3_FILE_PATH_DELIMITER)) {
+      sanitizedPath += S3_FILE_PATH_DELIMITER;
+    }
+
+    return sanitizedPath;
+  }
+
+  /**
+   * Best effort to handle Amazon exceptions as checked exceptions. Amazon exception are all
+   * subclasses of {@link RuntimeException} so some may still be uncaught and propagated.
+   */
+  static S3Exception handleAmazonException(AmazonClientException ace) {
+
+    if (ace instanceof AmazonServiceException) {
+      AmazonServiceException ase = (AmazonServiceException) ace;
+      String errMessage =
+          String.format(
+              Locale.ROOT,
+              "An AmazonServiceException was thrown! [serviceName=%s] "
+                  + "[awsRequestId=%s] [httpStatus=%s] [s3ErrorCode=%s] [s3ErrorType=%s] [message=%s]",
+              ase.getServiceName(),
+              ase.getRequestId(),
+              ase.getStatusCode(),
+              ase.getErrorCode(),
+              ase.getErrorType(),
+              ase.getErrorMessage());
+
+      log.error(errMessage);
+
+      if (ase.getStatusCode() == 404 && NOT_FOUND_CODES.contains(ase.getErrorCode())) {
+        return new S3NotFoundException(errMessage, ase);
+      } else {
+        return new S3Exception(errMessage, ase);
+      }
+    }
+
+    return new S3Exception(ace);
+  }
+}
diff --git a/solr/contrib/s3-repository/src/java/org/apache/solr/s3/package-info.java b/solr/contrib/s3-repository/src/java/org/apache/solr/s3/package-info.java
new file mode 100644
index 0000000..276f843
--- /dev/null
+++ b/solr/contrib/s3-repository/src/java/org/apache/solr/s3/package-info.java
@@ -0,0 +1,19 @@
+/*
+ * 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.
+ */
+
+/** Solr S3 backup repository */
+package org.apache.solr.s3;
diff --git a/solr/contrib/s3-repository/src/java/overview.html b/solr/contrib/s3-repository/src/java/overview.html
new file mode 100644
index 0000000..9b3fdad
--- /dev/null
+++ b/solr/contrib/s3-repository/src/java/overview.html
@@ -0,0 +1,26 @@
+<!--
+ 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.
+-->
+<html>
+<body>
+Apache Solr Search Server: AWS S3 BackupRepository
+
+<p>
+A BackupRepository implementation that can be used to store and retrieve backups from AWS S3.
+</p>
+
+</body>
+</html>
diff --git a/solr/contrib/s3-repository/src/test-files/conf/schema.xml b/solr/contrib/s3-repository/src/test-files/conf/schema.xml
new file mode 100644
index 0000000..4124fea
--- /dev/null
+++ b/solr/contrib/s3-repository/src/test-files/conf/schema.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ 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.
+-->
+<schema name="minimal" version="1.1">
+  <fieldType name="string" class="solr.StrField"/>
+  <fieldType name="int" class="${solr.tests.IntegerFieldType}" docValues="${solr.tests.numeric.dv}" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>
+  <fieldType name="long" class="${solr.tests.LongFieldType}" docValues="${solr.tests.numeric.dv}" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>
+  <dynamicField name="*" type="string" indexed="true" stored="true"/>
+  <!-- for versioning -->
+  <field name="_version_" type="long" indexed="true" stored="true"/>
+  <field name="_root_" type="string" indexed="true" stored="true" multiValued="false" required="false"/>
+  <field name="id" type="string" indexed="true" stored="true"/>
+  <dynamicField name="*_s"  type="string"  indexed="true"  stored="true" />
+  <uniqueKey>id</uniqueKey>
+</schema>
diff --git a/solr/contrib/s3-repository/src/test-files/conf/solrconfig.xml b/solr/contrib/s3-repository/src/test-files/conf/solrconfig.xml
new file mode 100644
index 0000000..853ba65
--- /dev/null
+++ b/solr/contrib/s3-repository/src/test-files/conf/solrconfig.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" ?>
+
+<!--
+ 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.
+-->
+
+<!-- Minimal solrconfig.xml with /select, /admin and /update only -->
+
+<config>
+
+  <dataDir>${solr.data.dir:}</dataDir>
+
+  <directoryFactory name="DirectoryFactory"
+                    class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
+  <schemaFactory class="ClassicIndexSchemaFactory"/>
+
+  <luceneMatchVersion>${tests.luceneMatchVersion:LATEST}</luceneMatchVersion>
+
+  <updateHandler class="solr.DirectUpdateHandler2">
+    <commitWithin>
+      <softCommit>${solr.commitwithin.softcommit:true}</softCommit>
+    </commitWithin>
+    <updateLog class="${solr.ulog:solr.UpdateLog}"></updateLog>
+  </updateHandler>
+
+  <requestHandler name="/select" class="solr.SearchHandler">
+    <lst name="defaults">
+      <str name="echoParams">explicit</str>
+      <str name="indent">true</str>
+      <str name="df">text</str>
+    </lst>
+
+  </requestHandler>
+  <indexConfig>
+    <mergeScheduler class="${solr.mscheduler:org.apache.lucene.index.ConcurrentMergeScheduler}"/>
+:  </indexConfig>
+</config>
+
diff --git a/solr/contrib/s3-repository/src/test-files/log4j2.xml b/solr/contrib/s3-repository/src/test-files/log4j2.xml
new file mode 100644
index 0000000..2c46666
--- /dev/null
+++ b/solr/contrib/s3-repository/src/test-files/log4j2.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  -->
+<!-- Configuration for asynchronous logging -->
+<!--Configuration>
+  <Appenders>
+    <Console name="STDERR" target="SYSTEM_ERR">
+      <PatternLayout>
+        <Pattern>
+          %maxLen{%-4r %-5p (%t) [%X{node_name} %X{collection} %X{shard} %X{replica} %X{core} %X{trace_id}] %c{1.} %m%notEmpty{
+          =>%ex{short}}}{10240}%n
+        </Pattern>
+      </PatternLayout>
+    </Console>
+  </Appenders>
+  <Loggers>
+    <AsyncLogger name="org.apache.zookeeper" level="WARN"/>
+    <AsyncLogger name="org.apache.hadoop" level="WARN"/>
+    <AsyncLogger name="org.apache.directory" level="WARN"/>
+    <AsyncLogger name="org.apache.solr.hadoop" level="INFO"/>
+    <AsyncLogger name="org.eclipse.jetty" level="INFO"/>
+
+    <AsyncRoot level="INFO">
+      <AppenderRef ref="STDERR"/>
+    </AsyncRoot>
+  </Loggers>
+</Configuration-->
+
+<!-- Configuration for synchronous logging
+     there _may_ be a very small window where log messages will not be flushed
+     to the log file on abnormal shutdown. If even this risk is unacceptable, use
+     the configuration below
+-->
+<Configuration>
+<Appenders>
+  <Console name="STDERR" target="SYSTEM_ERR">
+    <PatternLayout>
+      <Pattern>
+        %-4r %-5p (%t) [%X{node_name} %X{collection} %X{shard} %X{replica} %X{core}] %c{1.} %m%n
+      </Pattern>
+    </PatternLayout>
+  </Console>
+</Appenders>
+<Loggers>
+  <Logger name="org.apache.zookeeper" level="WARN"/>
+  <Logger name="org.apache.hadoop" level="WARN"/>
+  <Logger name="org.apache.directory" level="WARN"/>
+  <Logger name="org.apache.solr.hadoop" level="INFO"/>
+  <Logger name="org.eclipse.jetty" level="INFO"/>
+
+  <Root level="INFO">
+    <AppenderRef ref="STDERR"/>
+  </Root>
+</Loggers>
+</Configuration>
diff --git a/solr/contrib/s3-repository/src/test/org/apache/solr/s3/AbstractS3ClientTest.java b/solr/contrib/s3-repository/src/test/org/apache/solr/s3/AbstractS3ClientTest.java
new file mode 100644
index 0000000..79635b9
--- /dev/null
+++ b/solr/contrib/s3-repository/src/test/org/apache/solr/s3/AbstractS3ClientTest.java
@@ -0,0 +1,69 @@
+/*
+ * 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.solr.s3;
+
+import com.adobe.testing.s3mock.junit4.S3MockRule;
+import com.amazonaws.services.s3.AmazonS3;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.charset.Charset;
+import org.apache.commons.io.IOUtils;
+import org.apache.solr.SolrTestCaseJ4;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.ClassRule;
+
+/** Abstract class for test with S3Mock. */
+public class AbstractS3ClientTest extends SolrTestCaseJ4 {
+
+  private static final String BUCKET_NAME = "test-bucket";
+
+  @ClassRule
+  public static final S3MockRule S3_MOCK_RULE =
+      S3MockRule.builder().silent().withInitialBuckets(BUCKET_NAME)
+          .withProperty("spring.autoconfigure.exclude", "org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration")
+          .withProperty("spring.jmx.enabled", "false")
+          .withProperty("server.jetty.threads.idle-timeout", "3s")
+          .build();
+
+  S3StorageClient client;
+
+  @Before
+  public void setUpClient() {
+    AmazonS3 s3 = S3_MOCK_RULE.createS3Client();
+    client = new S3StorageClient(s3, BUCKET_NAME);
+  }
+
+  @After
+  public void tearDownClient() {
+    client.close();
+  }
+
+  /**
+   * Helper method to push a string to S3.
+   *
+   * @param path Destination path in S3.
+   * @param content Arbitrary content for the test.
+   */
+  void pushContent(String path, String content) throws S3Exception {
+    try (OutputStream output = client.pushStream(path)) {
+      IOUtils.write(content, output, Charset.defaultCharset());
+    } catch (IOException e) {
+      throw new S3Exception(e);
+    }
+  }
+}
diff --git a/solr/contrib/s3-repository/src/test/org/apache/solr/s3/S3BackupRepositoryTest.java b/solr/contrib/s3-repository/src/test/org/apache/solr/s3/S3BackupRepositoryTest.java
new file mode 100644
index 0000000..c7934be
--- /dev/null
+++ b/solr/contrib/s3-repository/src/test/org/apache/solr/s3/S3BackupRepositoryTest.java
@@ -0,0 +1,347 @@
+/*
+ * 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.solr.s3;
+
+import static org.apache.solr.s3.S3BackupRepository.S3_SCHEME;
+
+import com.adobe.testing.s3mock.junit4.S3MockRule;
+import com.amazonaws.regions.Regions;
+import com.amazonaws.services.s3.AmazonS3;
+import com.google.common.base.Strings;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.nio.charset.StandardCharsets;
+import org.apache.commons.io.FileUtils;
+import org.apache.lucene.codecs.CodecUtil;
+import org.apache.lucene.store.BufferedIndexInput;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.IOContext;
+import org.apache.lucene.store.IndexInput;
+import org.apache.lucene.store.IndexOutput;
+import org.apache.lucene.store.NIOFSDirectory;
+import org.apache.lucene.store.OutputStreamIndexOutput;
+import org.apache.solr.cloud.api.collections.AbstractBackupRepositoryTest;
+import org.apache.solr.common.util.NamedList;
+import org.apache.solr.core.backup.repository.BackupRepository;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+public class S3BackupRepositoryTest extends AbstractBackupRepositoryTest {
+
+  private static final String BUCKET_NAME = S3BackupRepositoryTest.class.getSimpleName();
+
+  @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+  @ClassRule
+  public static final S3MockRule S3_MOCK_RULE =
+      S3MockRule.builder().silent().withInitialBuckets(BUCKET_NAME)
+          .withProperty("spring.autoconfigure.exclude", "org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration")
+          .withProperty("spring.jmx.enabled", "false")
+          .withProperty("server.jetty.threads.idle-timeout", "3s")
+          .build();
+
+  @BeforeClass
+  public static void setupProperties() {
+    System.setProperty("aws.accessKeyId", "foo");
+    System.setProperty("aws.secretKey", "bar");
+  }
+
+  /**
+   * Sent by {@link org.apache.solr.handler.ReplicationHandler}, ensure we don't choke on the bare
+   * URI.
+   */
+  @Test
+  public void testURI() throws IOException {
+    try (S3BackupRepository repo = getRepository()) {
+      URI uri = repo.createURI("x");
+      assertEquals(
+          "'S3' scheme should be auto-added to the URI when not provided",
+          S3_SCHEME,
+          uri.getScheme());
+      assertEquals("URI path should be prefixed with /", "/x", uri.getPath());
+      assertEquals("s3:/x", uri.toString());
+
+      URI directoryUri = repo.createDirectoryURI("d");
+      assertEquals(
+          "'S3' scheme should be auto-added to the dir URI when not provided",
+          S3_SCHEME,
+          directoryUri.getScheme());
+      assertEquals(
+          "createDirectoryURI should add a trailing slash to URI",
+          "s3:/d/",
+          directoryUri.toString());
+
+      repo.createDirectory(directoryUri);
+      assertTrue(repo.exists(directoryUri));
+      directoryUri = repo.createDirectoryURI("d/");
+      assertEquals(
+          "createDirectoryURI should have a single trailing slash, even if one is provided",
+          "s3:/d/",
+          directoryUri.toString());
+    }
+  }
+
+  @Test
+  public void testLocalDirectoryFunctions() throws Exception {
+    try (S3BackupRepository repo = getRepository()) {
+
+      URI path = new URI("/test");
+      repo.createDirectory(path);
+      assertTrue(repo.exists(path));
+      assertEquals(BackupRepository.PathType.DIRECTORY, repo.getPathType(path));
+      assertEquals("No files should exist in dir yet", repo.listAll(path).length, 0);
+
+      URI subDir = new URI("/test/dir");
+      repo.createDirectory(subDir);
+      assertTrue(repo.exists(subDir));
+      assertEquals(BackupRepository.PathType.DIRECTORY, repo.getPathType(subDir));
+      assertEquals("No files should exist in subdir yet", repo.listAll(subDir).length, 0);
+
+      assertEquals(
+          "subDir should now be returned when listing all in parent dir",
+          repo.listAll(path).length,
+          1);
+
+      repo.deleteDirectory(path);
+      assertFalse(repo.exists(path));
+      assertFalse(repo.exists(subDir));
+    }
+  }
+
+  /** Check resolving paths. */
+  @Test
+  public void testResolve() throws Exception {
+    try (S3BackupRepository repo = getRepository()) {
+      // Add single element to root
+      assertEquals(new URI("s3:/root/path"), repo.resolve(new URI("s3:/root"), "path"));
+
+      // Root ends with '/'
+      assertEquals(new URI("s3://root/path"), repo.resolve(new URI("s3://root/"), "path"));
+      assertEquals(new URI("s3://root/path"), repo.resolve(new URI("s3://root///"), "path"));
+
+      // Add to a sub-element
+      assertEquals(
+          new URI("s3://root/path1/path2"), repo.resolve(new URI("s3://root/path1"), "path2"));
+
+      // Add two elements to root
+      assertEquals(
+          new URI("s3://root/path1/path2"), repo.resolve(new URI("s3://root"), "path1", "path2"));
+
+      // Add compound elements
+      assertEquals(
+          new URI("s3:/root/path1/path2/path3"),
+          repo.resolve(new URI("s3:/root"), "path1/path2", "path3"));
+
+      // Check URIs with an authority
+      assertEquals(new URI("s3://auth/path"), repo.resolve(new URI("s3://auth"), "path"));
+      assertEquals(
+          new URI("s3://auth/path1/path2"), repo.resolve(new URI("s3://auth/path1"), "path2"));
+    }
+  }
+
+  /** Check - pushing a file to the repo (backup). - pulling a file from the repo (restore). */
+  @Test
+  public void testCopyFiles() throws Exception {
+
+    // basic test with a small file
+    String content = "Test to push a backup";
+    doTestCopyFileFrom(content);
+    doTestCopyFileTo(content);
+
+    // copy a 10Mb file
+    content += Strings.repeat("1234567890", 1024 * 1024);
+    doTestCopyFileFrom(content);
+    doTestCopyFileTo(content);
+  }
+
+  /** Check copying a file to the repo (backup). Specified content is used for the file. */
+  private void doTestCopyFileFrom(String content) throws Exception {
+    try (S3BackupRepository repo = getRepository()) {
+
+      // A file on the local disk
+      File tmp = temporaryFolder.newFolder();
+      try (OutputStream os = FileUtils.openOutputStream(new File(tmp, "from-file"));
+          IndexOutput indexOutput = new OutputStreamIndexOutput("", "", os, content.length())) {
+        byte[] bytes = content.getBytes(StandardCharsets.UTF_8);
+        indexOutput.writeBytes(bytes, bytes.length);
+
+        CodecUtil.writeFooter(indexOutput);
+      }
+
+      Directory sourceDir = new NIOFSDirectory(tmp.toPath());
+      repo.copyIndexFileFrom(sourceDir, "from-file", new URI("s3://to-folder"), "to-file");
+
+      // Sanity check: we do have different files
+      File actualSource = new File(tmp, "from-file");
+      File actualDest = pullObject("to-folder/to-file");
+      assertNotEquals(actualSource, actualDest);
+
+      // Check the copied content
+      assertTrue(actualDest.isFile());
+      assertTrue(FileUtils.contentEquals(actualSource, actualDest));
+    }
+  }
+
+  /** Check retrieving a file from the repo (restore). Specified content is used for the file. */
+  private void doTestCopyFileTo(String content) throws Exception {
+
+    try (S3BackupRepository repo = getRepository()) {
+
+      // Local folder for destination
+      File tmp = temporaryFolder.newFolder();
+      Directory destDir = new NIOFSDirectory(tmp.toPath());
+
+      // Directly create a file on S3
+      pushObject("from-file", content);
+
+      repo.copyIndexFileTo(new URI("s3:///"), "from-file", destDir, "to-file");
+
+      // Sanity check: we do have different files
+      File actualSource = pullObject("from-file");
+      File actualDest = new File(tmp, "to-file");
+      assertNotEquals(actualSource, actualDest);
+
+      // Check the copied content
+      assertTrue(actualDest.isFile());
+      assertTrue(FileUtils.contentEquals(actualSource, actualDest));
+    }
+  }
+
+  /** Check reading input with random access stream. */
+  @Test
+  public void testRandomAccessInput() throws Exception {
+
+    // Test with a short text that fills in the buffer
+    String content = "This is the content of my blob";
+    doRandomAccessTest(content, content.indexOf("content"));
+
+    // Large text, we force to refill the buffer
+    String blank = Strings.repeat(" ", 5 * BufferedIndexInput.BUFFER_SIZE);
+    content = "This is a super large" + blank + "content";
+    doRandomAccessTest(content, content.indexOf("content"));
+  }
+
+  /**
+   * Check implementation of {@link S3BackupRepository#openInput(URI, String, IOContext)}. Open an
+   * index input and seek to an absolute position.
+   *
+   * <p>We use specified text. It must has the word "content" at given position.
+   */
+  private void doRandomAccessTest(String content, int position) throws Exception {
+
+    try (S3BackupRepository repo = getRepository()) {
+      File tmp = temporaryFolder.newFolder();
+
+      // Open an index input on a file
+      pushObject("/my-repo/content", content);
+      IndexInput input = repo.openInput(new URI("s3://my-repo"), "content", IOContext.DEFAULT);
+
+      byte[] buffer = new byte[100];
+
+      // Read 4 bytes
+      input.readBytes(buffer, 0, 4);
+      assertEquals(
+          "Reading from beginning of buffer should return 'This'",
+          "This",
+          new String(buffer, 0, 4, StandardCharsets.UTF_8));
+
+      // Seek to the work 'content' and read it
+      input.seek(position);
+      input.readBytes(buffer, 0, 7);
+      assertEquals(
+          "Seeking to pos " + position + " in buffer should return 'content'",
+          "content",
+          new String(buffer, 0, 7, StandardCharsets.UTF_8));
+    }
+  }
+
+  /** Check we gracefully fail when seeking before current position of the stream. */
+  @Test
+  public void testBackwardRandomAccess() throws Exception {
+
+    try (S3BackupRepository repo = getRepository()) {
+
+      // Open an index input on a file
+      String blank = Strings.repeat(" ", 5 * BufferedIndexInput.BUFFER_SIZE);
+      String content = "This is the file " + blank + "content";
+
+      pushObject("/content", content);
+      IndexInput input = repo.openInput(new URI("s3:///"), "content", IOContext.DEFAULT);
+
+      // Read twice the size of the internal buffer, so first bytes are not in the buffer anymore
+      byte[] buffer = new byte[BufferedIndexInput.BUFFER_SIZE * 2];
+      input.readBytes(buffer, 0, BufferedIndexInput.BUFFER_SIZE * 2);
+
+      // Seek back to the 5th byte.
+      // It is not any more in the internal buffer, so we should fail
+      IOException exception = assertThrows(IOException.class, () -> input.seek(5));
+      assertEquals("Cannot seek backward", exception.getMessage());
+    }
+  }
+
+  @Override
+  protected S3BackupRepository getRepository() {
+    NamedList<Object> args = getBaseBackupRepositoryConfiguration();
+
+    S3BackupRepository repo = new S3BackupRepository();
+    repo.init(args);
+
+    return repo;
+  }
+
+  @Override
+  protected URI getBaseUri() throws URISyntaxException {
+    return new URI("s3:/");
+  }
+
+  @Override
+  protected NamedList<Object> getBaseBackupRepositoryConfiguration() {
+    NamedList<Object> args = new NamedList<>();
+    args.add(S3BackupRepositoryConfig.REGION, Regions.US_EAST_1.name());
+    args.add(S3BackupRepositoryConfig.BUCKET_NAME, BUCKET_NAME);
+    args.add(S3BackupRepositoryConfig.ENDPOINT, "http://localhost:" + S3_MOCK_RULE.getHttpPort());
+    return args;
+  }
+
+  private void pushObject(String path, String content) {
+    AmazonS3 s3 = S3_MOCK_RULE.createS3Client();
+    try {
+      s3.putObject(BUCKET_NAME, path, content);
+    } finally {
+      s3.shutdown();
+    }
+  }
+
+  private File pullObject(String path) throws IOException {
+    AmazonS3 s3 = S3_MOCK_RULE.createS3Client();
+    try {
+      File file = temporaryFolder.newFile();
+      InputStream input = s3.getObject(BUCKET_NAME, path).getObjectContent();
+      FileUtils.copyInputStreamToFile(input, file);
+      return file;
+    } finally {
+      s3.shutdown();
+    }
+  }
+}
diff --git a/solr/contrib/s3-repository/src/test/org/apache/solr/s3/S3IncrementalBackupTest.java b/solr/contrib/s3-repository/src/test/org/apache/solr/s3/S3IncrementalBackupTest.java
new file mode 100644
index 0000000..c784647
--- /dev/null
+++ b/solr/contrib/s3-repository/src/test/org/apache/solr/s3/S3IncrementalBackupTest.java
@@ -0,0 +1,113 @@
+/*
+ * 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.solr.s3;
+
+import com.adobe.testing.s3mock.junit4.S3MockRule;
+import com.amazonaws.regions.Regions;
+import java.lang.invoke.MethodHandles;
+import org.apache.lucene.util.LuceneTestCase;
+import org.apache.solr.cloud.api.collections.AbstractIncrementalBackupTest;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@LuceneTestCase.SuppressCodecs({
+  "SimpleText"
+}) // Backups do checksum validation against a footer value not present in 'SimpleText'
+public class S3IncrementalBackupTest extends AbstractIncrementalBackupTest {
+  private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+  private static final String BUCKET_NAME = S3IncrementalBackupTest.class.getSimpleName();
+
+  @ClassRule
+  public static final S3MockRule S3_MOCK_RULE =
+      S3MockRule.builder().silent().withInitialBuckets(BUCKET_NAME)
+          .withProperty("spring.autoconfigure.exclude", "org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration")
+          .withProperty("spring.jmx.enabled", "false")
+          .withProperty("server.jetty.threads.idle-timeout", "1s")
+          .build();
+
+  public static final String SOLR_XML =
+      "<solr>\n"
+          + "\n"
+          + "  <str name=\"shareSchema\">${shareSchema:false}</str>\n"
+          + "  <str name=\"configSetBaseDir\">${configSetBaseDir:configsets}</str>\n"
+          + "  <str name=\"coreRootDirectory\">${coreRootDirectory:.}</str>\n"
+          + "\n"
+          + "  <shardHandlerFactory name=\"shardHandlerFactory\" class=\"HttpShardHandlerFactory\">\n"
+          + "    <str name=\"urlScheme\">${urlScheme:}</str>\n"
+          + "    <int name=\"socketTimeout\">${socketTimeout:90000}</int>\n"
+          + "    <int name=\"connTimeout\">${connTimeout:15000}</int>\n"
+          + "  </shardHandlerFactory>\n"
+          + "\n"
+          + "  <solrcloud>\n"
+          + "    <str name=\"host\">127.0.0.1</str>\n"
+          + "    <int name=\"hostPort\">${hostPort:8983}</int>\n"
+          + "    <str name=\"hostContext\">${hostContext:solr}</str>\n"
+          + "    <int name=\"zkClientTimeout\">${solr.zkclienttimeout:30000}</int>\n"
+          + "    <bool name=\"genericCoreNodeNames\">${genericCoreNodeNames:true}</bool>\n"
+          + "    <int name=\"leaderVoteWait\">10000</int>\n"
+          + "    <int name=\"distribUpdateConnTimeout\">${distribUpdateConnTimeout:45000}</int>\n"
+          + "    <int name=\"distribUpdateSoTimeout\">${distribUpdateSoTimeout:340000}</int>\n"
+          + "  </solrcloud>\n"
+          + "  \n"
+          + "  <backup>\n"
+          + "    <repository name=\"trackingBackupRepository\" class=\"org.apache.solr.core.TrackingBackupRepository\"> \n"
+          + "      <str name=\"delegateRepoName\">s3</str>\n"
+          + "    </repository>\n"
+          + "    <repository name=\"s3\" class=\"org.apache.solr.s3.S3BackupRepository\"> \n"
+          + "      <str name=\"s3.bucket.name\">BUCKET</str>\n"
+          + "      <str name=\"s3.region\">REGION</str>\n"
+          + "      <str name=\"s3.endpoint\">ENDPOINT</str>\n"
+          + "    </repository>\n"
+          + "  </backup>\n"
+          + "  \n"
+          + "</solr>\n";
+
+  private static String backupLocation;
+
+  @BeforeClass
+  public static void ensureCompatibleLocale() {
+    // TODO: Find incompatible locales
+  }
+
+  @BeforeClass
+  public static void setupClass() throws Exception {
+    System.setProperty("aws.accessKeyId", "foo");
+    System.setProperty("aws.secretKey", "bar");
+    configureCluster(NUM_SHARDS) // nodes
+        .addConfig("conf1", getFile("conf/solrconfig.xml").getParentFile().toPath())
+        .withSolrXml(
+            SOLR_XML
+                .replace("BUCKET", BUCKET_NAME)
+                .replace("REGION", Regions.US_EAST_1.getName())
+                .replace("ENDPOINT", "http://localhost:" + S3_MOCK_RULE.getHttpPort()))
+        .configure();
+  }
+
+  @Override
+  public String getCollectionNamePrefix() {
+    return "backuprestore";
+  }
+
+  @Override
+  public String getBackupLocation() {
+    return "/";
+  }
+}
diff --git a/solr/contrib/s3-repository/src/test/org/apache/solr/s3/S3IndexInputTest.java b/solr/contrib/s3-repository/src/test/org/apache/solr/s3/S3IndexInputTest.java
new file mode 100644
index 0000000..cefae1a
--- /dev/null
+++ b/solr/contrib/s3-repository/src/test/org/apache/solr/s3/S3IndexInputTest.java
@@ -0,0 +1,130 @@
+/*
+ * 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.solr.s3;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.solr.SolrTestCaseJ4;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+/** Test for reading files from S3 'the Solr way'. */
+public class S3IndexInputTest extends SolrTestCaseJ4 {
+
+  @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+  /** Simulates fetching a file from S3 in more than one read operation. */
+  @Test
+  public void testPartialReadSmallSlice() throws IOException {
+    String content = "This is much too large for a single slice";
+    int slice = 5;
+
+    doTestPartialRead(false, content, slice);
+    doTestPartialRead(true, content, slice);
+  }
+
+  /**
+   * Simulates fetching a file from S3 in more than one read operation, reading larger than internal
+   * buffer size.
+   */
+  @Test
+  public void testPartialReadBigSlice() throws IOException {
+    // Large text, be sure we can't read in a single I/O call
+    int length = S3IndexInput.LOCAL_BUFFER_SIZE * 10 + 5;
+    String content = RandomStringUtils.randomAscii(length);
+
+    int slice = S3IndexInput.LOCAL_BUFFER_SIZE * 2;
+    doTestPartialRead(false, content, slice);
+    doTestPartialRead(true, content, slice);
+  }
+
+  private void doTestPartialRead(boolean directBuffer, String content, int slice)
+      throws IOException {
+
+    File tmp = temporaryFolder.newFolder();
+    File file = new File(tmp, "content");
+    FileUtils.write(file, content, StandardCharsets.UTF_8);
+
+    SliceInputStream slicedStream = new SliceInputStream(new FileInputStream(file), slice);
+    S3IndexInput input = new S3IndexInput(slicedStream, "path", file.length());
+
+    // Now read the file
+    ByteBuffer buffer;
+    if (directBuffer) {
+      buffer = ByteBuffer.allocateDirect((int) file.length());
+    } else {
+      buffer = ByteBuffer.allocate((int) file.length());
+    }
+    input.readInternal(buffer);
+    input.close();
+
+    // Check the buffer content, in a way that works for both heap and direct buffers
+    buffer.position(0);
+    byte[] bytes = new byte[buffer.remaining()];
+    buffer.get(bytes);
+    assertEquals(content, new String(bytes, Charset.defaultCharset()));
+
+    // Ensure we actually made many calls
+    int expectedReadCount;
+    if (directBuffer) {
+      // For direct buffer, we may be caped by internal buffer if it's smaller than the size defined
+      // by the test
+      expectedReadCount = content.length() / Math.min(slice, S3IndexInput.LOCAL_BUFFER_SIZE) + 1;
+    } else {
+      expectedReadCount = content.length() / slice + 1;
+    }
+    assertEquals(
+        "S3IndexInput did an unexpected number of reads",
+        expectedReadCount,
+        slicedStream.readCount);
+  }
+
+  /** Input stream that reads, but not too much in a single call. */
+  private static class SliceInputStream extends InputStream {
+
+    private final InputStream input;
+    private final int slice;
+
+    // for testing, number of calls to read() method.
+    private int readCount;
+
+    SliceInputStream(InputStream input, int slice) {
+      this.input = input;
+      this.slice = slice;
+    }
+
+    @Override
+    public int read() throws IOException {
+      return input.read();
+    }
+
+    @Override
+    public int read(byte[] b, int off, int length) throws IOException {
+      readCount++;
+      int slicedLength = Math.min(slice, length);
+      return super.read(b, off, slicedLength);
+    }
+  }
+}
diff --git a/solr/contrib/s3-repository/src/test/org/apache/solr/s3/S3OutputStreamTest.java b/solr/contrib/s3-repository/src/test/org/apache/solr/s3/S3OutputStreamTest.java
new file mode 100644
index 0000000..52f9fb2
--- /dev/null
+++ b/solr/contrib/s3-repository/src/test/org/apache/solr/s3/S3OutputStreamTest.java
@@ -0,0 +1,164 @@
+/*
+ * 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.solr.s3;
+
+import com.adobe.testing.s3mock.junit4.S3MockRule;
+import com.amazonaws.services.s3.AmazonS3;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.solr.SolrTestCaseJ4;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.ClassRule;
+import org.junit.Test;
+
+public class S3OutputStreamTest extends SolrTestCaseJ4 {
+
+  private static final String BUCKET = S3OutputStreamTest.class.getSimpleName();
+
+  @ClassRule
+  public static final S3MockRule S3_MOCK_RULE =
+      S3MockRule.builder().silent().withInitialBuckets(BUCKET)
+          .withProperty("spring.autoconfigure.exclude", "org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration")
+          .withProperty("spring.jmx.enabled", "false")
+          .withProperty("server.jetty.threads.idle-timeout", "3s")
+          .build();
+
+  private AmazonS3 s3;
+
+  @Before
+  public void setUpClient() {
+    s3 = S3_MOCK_RULE.createS3Client();
+  }
+
+  @After
+  public void tearDownClient() {
+    s3.shutdown();
+  }
+
+  /**
+   * Basic check writing content byte-by-byte. They should be kept in the internal buffer and
+   * flushed to S3 only once.
+   */
+  @Test
+  public void testWriteByteByByte() throws IOException {
+
+    S3OutputStream output = new S3OutputStream(s3, "byte-by-byte", BUCKET);
+    output.write('h');
+    output.write('e');
+    output.write('l');
+    output.write('l');
+    output.write('o');
+    output.close();
+
+    // Check we can re-read same content
+    InputStream input = s3.getObject(BUCKET, "byte-by-byte").getObjectContent();
+    String read = IOUtils.toString(input, Charset.defaultCharset());
+    assertEquals("Contents saved to S3 file did not match expected", "hello", read);
+  }
+
+  /** Write a small byte array, which is smaller than S3 part size. */
+  @Test
+  public void testWriteSmallBuffer() throws IOException {
+
+    // must be smaller than S3 part size
+    byte[] buffer = "hello".getBytes(Charset.defaultCharset());
+    // pre-check -- ensure that our test string isn't too big
+    assertTrue(buffer.length < S3OutputStream.PART_SIZE);
+
+    S3OutputStream output = new S3OutputStream(s3, "small-buffer", BUCKET);
+    output.write(buffer);
+    output.close();
+
+    // Check we can re-read same content
+    InputStream input = s3.getObject(BUCKET, "small-buffer").getObjectContent();
+    String read = IOUtils.toString(input, Charset.defaultCharset());
+    assertEquals("hello", read);
+  }
+
+  /** Write a byte array larger than S3 part size. Simulate a real multi-part upload. */
+  @Test
+  public void testWriteLargeBuffer() throws IOException {
+
+    // must be larger than S3 part size
+    String content = RandomStringUtils.randomAlphanumeric(S3OutputStream.PART_SIZE + 1024);
+    byte[] buffer = content.getBytes(Charset.defaultCharset());
+    // pre-check -- ensure that our test string isn't too small
+    assertTrue(buffer.length > S3OutputStream.PART_SIZE);
+
+    S3OutputStream output = new S3OutputStream(s3, "large-buffer", BUCKET);
+    output.write(buffer);
+    output.close();
+
+    // Check we can re-read same content
+    InputStream input = s3.getObject(BUCKET, "large-buffer").getObjectContent();
+    String read = IOUtils.toString(input, Charset.defaultCharset());
+    assertEquals(new String(buffer, Charset.defaultCharset()), read);
+  }
+
+  /** Check flush is a no-op if data size is lower than required size of S3 part. */
+  @Test
+  public void testFlushSmallBuffer() throws IOException {
+    // must be smaller than S3 minimal part size, so flush is a no-op
+    byte[] buffer = "hello".getBytes(Charset.defaultCharset());
+    assertTrue(buffer.length < S3OutputStream.PART_SIZE);
+
+    S3OutputStream output = new S3OutputStream(s3, "flush-small", BUCKET);
+    output.write(buffer);
+    output.flush();
+
+    buffer = ", world!".getBytes(Charset.defaultCharset());
+    output.write(buffer);
+    output.close();
+
+    // Check we can re-read same content
+    InputStream input = s3.getObject(BUCKET, "flush-small").getObjectContent();
+    String read = IOUtils.toString(input, Charset.defaultCharset());
+    assertEquals(
+        "Flushing a small frame of an S3OutputStream should not impact data written",
+        "hello, world!",
+        read);
+  }
+
+  /** Check flush is happening when data in buffer is larger than S3 minimal part size. */
+  @Test
+  public void testFlushLargeBuffer() throws IOException {
+    // must be larger than S3 minimal part size, so we actually do something for flush()
+    String content = RandomStringUtils.randomAlphanumeric(S3OutputStream.MIN_PART_SIZE + 1024);
+    byte[] buffer = content.getBytes(Charset.defaultCharset());
+    assertTrue(buffer.length > S3OutputStream.MIN_PART_SIZE);
+
+    S3OutputStream output = new S3OutputStream(s3, "flush-large", BUCKET);
+    output.write(buffer);
+    output.flush();
+
+    buffer = "some more".getBytes(Charset.defaultCharset());
+    output.write(buffer);
+    output.close();
+
+    // Check we can re-read same content
+    InputStream input = s3.getObject(BUCKET, "flush-large").getObjectContent();
+    String read = IOUtils.toString(input, Charset.defaultCharset());
+    assertEquals(
+        "Flushing a large frame of an S3OutputStream should not impact data written",
+        content + "some more",
+        read);
+  }
+}
diff --git a/solr/contrib/s3-repository/src/test/org/apache/solr/s3/S3PathsTest.java b/solr/contrib/s3-repository/src/test/org/apache/solr/s3/S3PathsTest.java
new file mode 100644
index 0000000..efba913
--- /dev/null
+++ b/solr/contrib/s3-repository/src/test/org/apache/solr/s3/S3PathsTest.java
@@ -0,0 +1,185 @@
+/*
+ * 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.solr.s3;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import com.google.common.collect.Sets;
+import org.junit.Test;
+
+/** Test creating and deleting objects at different paths. */
+public class S3PathsTest extends AbstractS3ClientTest {
+
+  /** The root must always exist. */
+  @Test
+  public void testRoot() throws S3Exception {
+    assertTrue(client.pathExists("/"));
+  }
+
+  /** Simple tests with files. */
+  @Test
+  public void testFiles() throws S3Exception {
+    assertFalse(client.pathExists("simple-file"));
+    assertFalse(client.pathExists("/simple-file/"));
+
+    pushContent("/simple-file", "blah");
+    assertTrue("File should exist without a leading slash", client.pathExists("simple-file"));
+    assertTrue("File should exist with a leading slash", client.pathExists("/simple-file"));
+  }
+
+  /** Simple tests with a directory. */
+  @Test
+  public void testDirectory() throws S3Exception {
+
+    client.createDirectory("/simple-directory");
+    assertTrue(client.pathExists("/simple-directory"));
+    assertTrue("Dir should exist without a leading slash", client.pathExists("simple-directory/"));
+    assertTrue("Dir should exist with a leading slash", client.pathExists("/simple-directory/"));
+    assertTrue(
+        "Leading slash should be irrelevant for determining if dir is a dir",
+        client.isDirectory("simple-directory/"));
+    assertTrue(
+        "Leading slash should be irrelevant for determining if dir is a dir",
+        client.isDirectory("/simple-directory/"));
+  }
+
+  /** Happy path of deleting a directory */
+  @Test
+  public void testDeleteDirectory() throws S3Exception {
+
+    client.createDirectory("/delete-dir");
+
+    pushContent("/delete-dir/file1", "file1");
+    pushContent("/delete-dir/file2", "file2");
+
+    client.deleteDirectory("/delete-dir");
+
+    assertFalse("dir should no longer exist after deletion", client.pathExists("/delete-dir"));
+    assertFalse(
+        "files in dir should be recursively deleted", client.pathExists("/delete-dir/file1"));
+    assertFalse(
+        "files in dir should be recursively deleted", client.pathExists("/delete-dir/file2"));
+  }
+
+  /** Ensure directory deletion is recursive. */
+  @Test
+  public void testDeleteDirectoryMultipleLevels() throws S3Exception {
+
+    client.createDirectory("/delete-dir");
+    pushContent("/delete-dir/file1", "file1");
+
+    client.createDirectory("/delete-dir/sub-dir1");
+    pushContent("/delete-dir/sub-dir1/file2", "file2");
+
+    client.createDirectory("/delete-dir/sub-dir1/sub-dir2");
+    pushContent("/delete-dir/sub-dir1/sub-dir2/file3", "file3");
+
+    client.deleteDirectory("/delete-dir");
+
+    // All files and subdirs in /delete-dir should no longer exist
+    assertFalse(client.pathExists("/delete-dir"));
+    assertFalse(client.pathExists("/delete-dir/file1"));
+    assertFalse(client.pathExists("/delete-dir/sub-dir1"));
+    assertFalse(client.pathExists("/delete-dir/sub-dir1/file2"));
+    assertFalse(client.pathExists("/delete-dir/sub-dir1/sub-dir2"));
+    assertFalse(client.pathExists("/delete-dir/sub-dir1/sub-dir2/file3"));
+  }
+
+  /**
+   * S3StorageClient batches deletes (1000 per request) to adhere to S3's hard limit. Since the
+   * S3Mock does not enforce this limitation, however, the exact batch size doesn't matter here: all
+   * we're really testing is that the partition logic works and doesn't miss any files.
+   */
+  @Test
+  public void testDeleteBatching() throws S3Exception {
+
+    client.createDirectory("/delete-dir");
+
+    List<String> pathsToDelete = new ArrayList<>();
+    for (int i = 0; i < 101; i++) {
+      String path = "delete-dir/file" + i;
+      pathsToDelete.add(path);
+      pushContent(path, "foo");
+    }
+
+    client.deleteObjects(pathsToDelete, 10);
+    for (String path : pathsToDelete) {
+      assertFalse("file " + path + " does exist", client.pathExists(path));
+    }
+  }
+
+  @Test
+  public void testDeleteMultipleFiles() throws S3Exception {
+
+    client.createDirectory("/my");
+    pushContent("/my/file1", "file1");
+    pushContent("/my/file2", "file2");
+    pushContent("/my/file3", "file3");
+
+    client.delete(Arrays.asList("/my/file1", "my/file3"));
+
+    assertFalse(client.pathExists("/my/file1"));
+    assertFalse(client.pathExists("/my/file3"));
+
+    // Other files with same prefix should be there
+    assertTrue(
+        "Deletes to file1 and file3 should not affect file2", client.pathExists("/my/file2"));
+  }
+
+  /** Test deleting a directory which is the prefix of another objects (without deleting them). */
+  @Test
+  public void testDeletePrefix() throws S3Exception {
+
+    client.createDirectory("/my");
+    pushContent("/my/file", "file");
+
+    pushContent("/my-file1", "file1");
+    pushContent("/my-file2", "file2");
+
+    client.deleteDirectory("/my");
+
+    // Deleted directory and its file should be gone
+    assertFalse(client.pathExists("/my/file"));
+    assertFalse(client.pathExists("/my"));
+
+    // Other files with same prefix should be there
+    assertTrue(client.pathExists("/my-file1"));
+    assertTrue(client.pathExists("/my-file2"));
+  }
+
+  /** Check listing objects of a directory. */
+  @Test
+  public void testListDir() throws S3Exception {
+
+    client.createDirectory("/list-dir");
+    client.createDirectory("/list-dir/sub-dir");
+    pushContent("/list-dir/file", "file");
+    pushContent("/list-dir/sub-dir/file", "file");
+
+    // These files have same prefix in name, but should not be returned
+    pushContent("/list-dir-file1", "file1");
+    pushContent("/list-dir-file2", "file2");
+
+    String[] items = client.listDir("/list-dir");
+    assertEquals(
+        "listDir returned a different set of files than expected",
+        Sets.newHashSet("file", "sub-dir"),
+        Sets.newHashSet(items));
+  }
+}
diff --git a/solr/contrib/s3-repository/src/test/org/apache/solr/s3/S3ReadWriteTest.java b/solr/contrib/s3-repository/src/test/org/apache/solr/s3/S3ReadWriteTest.java
new file mode 100644
index 0000000..815238a
--- /dev/null
+++ b/solr/contrib/s3-repository/src/test/org/apache/solr/s3/S3ReadWriteTest.java
@@ -0,0 +1,105 @@
+/*
+ * 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.solr.s3;
+
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.util.Collections;
+import org.apache.commons.io.IOUtils;
+import org.junit.Test;
+
+/** Basic test that write data and read them through the S3 client. */
+public class S3ReadWriteTest extends AbstractS3ClientTest {
+
+  /** Write and read a simple file (happy path). */
+  @Test
+  public void testBasicWriteRead() throws Exception {
+    pushContent("/foo", "my blob");
+
+    try (InputStream stream = client.pullStream("/foo")) {
+      assertEquals("my blob", IOUtils.toString(stream, Charset.defaultCharset()));
+    }
+  }
+
+  /** Check writing a file with no path. */
+  @Test
+  public void testWriteNoPath() {
+    assertThrows(
+        "Should not be able to write content to empty path",
+        S3Exception.class,
+        () -> pushContent("", "empty path"));
+    assertThrows(
+        "Should not be able to write content to root path",
+        S3Exception.class,
+        () -> pushContent("/", "empty path"));
+  }
+
+  /** Check reading a file with no path. */
+  @Test
+  public void testReadNoPath() {
+    assertThrows(
+        "Should not be able to read content from empty path",
+        S3Exception.class,
+        () -> client.pullStream(""));
+    assertThrows(
+        "Should not be able to read content from empty path",
+        S3Exception.class,
+        () -> client.pullStream("/"));
+  }
+
+  /** Test writing over an existing file and overriding the content. */
+  @Test
+  public void testWriteOverFile() throws Exception {
+    pushContent("/override", "old content");
+    pushContent("/override", "new content");
+
+    InputStream stream = client.pullStream("/override");
+    assertEquals(
+        "File contents should have been overriden",
+        "new content",
+        IOUtils.toString(stream, Charset.defaultCharset()));
+  }
+
+  /** Check getting the length of a written file. */
+  @Test
+  public void testLength() throws Exception {
+    pushContent("/foo", "0123456789");
+    assertEquals(10, client.length("/foo"));
+  }
+
+  /** Check an exception is raised when getting the length of a directory. */
+  @Test
+  public void testDirectoryLength() throws Exception {
+    client.createDirectory("/directory");
+
+    S3Exception exception =
+        assertThrows(
+            "Getting length on a dir should throw exception",
+            S3Exception.class,
+            () -> client.length("/directory"));
+    assertEquals("Path is Directory", exception.getMessage());
+  }
+
+  /** Check various method throws the expected exception of a missing S3 key. */
+  @Test
+  public void testNotFound() {
+    assertThrows(S3NotFoundException.class, () -> client.pullStream("/not-found"));
+    assertThrows(S3NotFoundException.class, () -> client.length("/not-found"));
+    assertThrows(
+        S3NotFoundException.class, () -> client.delete(Collections.singleton("/not-found")));
+  }
+}
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/BackupCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/BackupCmd.java
index 8273d49..455fc18 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/BackupCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/BackupCmd.java
@@ -90,7 +90,7 @@ public class BackupCmd implements OverseerCollectionMessageHandler.Cmd {
     try (BackupRepository repository = cc.newBackupRepository(Optional.ofNullable(repo))) {
 
       // Backup location
-      URI location = repository.createURI(message.getStr(CoreAdminParams.BACKUP_LOCATION));
+      URI location = repository.createDirectoryURI(message.getStr(CoreAdminParams.BACKUP_LOCATION));
       final URI backupUri = createAndValidateBackupPath(repository, incremental, location, backupName, collectionName);
 
       BackupManager backupMgr = (incremental) ?
@@ -145,7 +145,7 @@ public class BackupCmd implements OverseerCollectionMessageHandler.Cmd {
   }
 
   private URI createAndValidateBackupPath(BackupRepository repository, boolean incremental, URI location, String backupName, String collection) throws IOException{
-    final URI backupNamePath = repository.resolve(location, backupName);
+    final URI backupNamePath = repository.resolveDirectory(location, backupName);
 
     if ( (!incremental) && repository.exists(backupNamePath)) {
         throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "The backup directory already exists: " + backupNamePath);
@@ -155,10 +155,17 @@ public class BackupCmd implements OverseerCollectionMessageHandler.Cmd {
       repository.createDirectory(backupNamePath);
     } else if (incremental){
       final String[] directoryContents = repository.listAll(backupNamePath);
-      if (directoryContents.length == 1 && !directoryContents[0].equals(collection)) {
-        throw new SolrException(ErrorCode.BAD_REQUEST, "The backup [" + backupName + "] at location [" + location +
-                "] cannot be used to back up [" + collection + "], as it already holds a different collection [" +
-                directoryContents[0] + "]");
+      if (directoryContents.length == 1) {
+        String directoryContentsName = directoryContents[0];
+        // Strip the trailing '/' if it exists
+        if (directoryContentsName.endsWith("/")) {
+          directoryContentsName = directoryContentsName.substring(0, directoryContentsName.length()-1);
+        }
+        if (!directoryContentsName.equals(collection)) {
+          throw new SolrException(ErrorCode.BAD_REQUEST, "The backup [" + backupName + "] at location [" + location +
+              "] cannot be used to back up [" + collection + "], as it already holds a different collection [" +
+              directoryContents[0] + "]");
+        }
       }
     }
 
@@ -167,7 +174,7 @@ public class BackupCmd implements OverseerCollectionMessageHandler.Cmd {
     }
 
     // Incremental backups have an additional directory named after the collection that needs created
-    final URI backupPathWithCollection = repository.resolve(backupNamePath, collection);
+    final URI backupPathWithCollection = repository.resolveDirectory(backupNamePath, collection);
     if (! repository.exists(backupPathWithCollection)) {
       repository.createDirectory(backupPathWithCollection);
     }
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteBackupCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteBackupCmd.java
index e910de3..f623ca3 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteBackupCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteBackupCmd.java
@@ -84,7 +84,7 @@ public class DeleteBackupCmd implements OverseerCollectionMessageHandler.Cmd {
         }
         CoreContainer cc = ocmh.overseer.getCoreContainer();
         try (BackupRepository repository = cc.newBackupRepository(Optional.ofNullable(repo))) {
-            URI location = repository.createURI(backupLocation);
+            URI location = repository.createDirectoryURI(backupLocation);
             final URI backupPath = BackupFilePaths.buildExistingBackupLocationURI(repository, location, backupName);
             if (repository.exists(repository.resolve(backupPath, BackupManager.TRADITIONAL_BACKUP_PROPS_FILE))) {
                 throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "The backup name [" + backupName + "] at " +
@@ -190,7 +190,7 @@ public class DeleteBackupCmd implements OverseerCollectionMessageHandler.Cmd {
         repository.delete(incBackupFiles.getIndexDir(), unusedFiles, true);
         try {
             for (BackupId backupId : backupIdsDeletes) {
-                repository.deleteDirectory(repository.resolve(backupUri, BackupFilePaths.getZkStateDir(backupId)));
+                repository.deleteDirectory(repository.resolveDirectory(backupUri, BackupFilePaths.getZkStateDir(backupId)));
             }
         } catch (FileNotFoundException e) {
             //ignore this
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/RestoreCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/RestoreCmd.java
index 493669b..987d0d7 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/RestoreCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/RestoreCmd.java
@@ -171,12 +171,12 @@ public class RestoreCmd implements OverseerCollectionMessageHandler.Cmd {
       this.container = ocmh.overseer.getCoreContainer();
       this.repository = this.container.newBackupRepository(Optional.ofNullable(repo));
 
-      this.location = repository.createURI(message.getStr(CoreAdminParams.BACKUP_LOCATION));
-      final URI backupNameUri = repository.resolve(location, backupName);
+      this.location = repository.createDirectoryURI(message.getStr(CoreAdminParams.BACKUP_LOCATION));
+      final URI backupNameUri = repository.resolveDirectory(location, backupName);
       final String[] entries = repository.listAll(backupNameUri);
       final boolean incremental = ! Arrays.stream(entries).anyMatch(entry -> entry.equals(BackupManager.TRADITIONAL_BACKUP_PROPS_FILE));
       this.backupPath = (incremental) ?
-              repository.resolve(backupNameUri, entries[0]) : // incremental backups have an extra path component representing the backed up collection
+              repository.resolveDirectory(backupNameUri, entries[0]) : // incremental backups have an extra path component representing the backed up collection
               backupNameUri;
       this.zkStateReader = ocmh.zkStateReader;
       this.backupManager = backupId == -1 ?
diff --git a/solr/core/src/java/org/apache/solr/core/backup/BackupFilePaths.java b/solr/core/src/java/org/apache/solr/core/backup/BackupFilePaths.java
index 93452ee..43b27dc 100644
--- a/solr/core/src/java/org/apache/solr/core/backup/BackupFilePaths.java
+++ b/solr/core/src/java/org/apache/solr/core/backup/BackupFilePaths.java
@@ -61,7 +61,7 @@ public class BackupFilePaths {
      * Only valid for incremental backups.
      */
     public URI getIndexDir() {
-        return repository.resolve(backupLoc, "index");
+        return repository.resolveDirectory(backupLoc, "index");
     }
 
     /**
@@ -70,7 +70,7 @@ public class BackupFilePaths {
      * Only valid for incremental backups.
      */
     public URI getShardBackupMetadataDir() {
-        return repository.resolve(backupLoc, "shard_backup_metadata");
+        return repository.resolveDirectory(backupLoc, "shard_backup_metadata");
     }
 
     public URI getBackupLocation() {
@@ -108,7 +108,7 @@ public class BackupFilePaths {
         if (id.id == TRADITIONAL_BACKUP) {
             return ZK_STATE_DIR;
         }
-        return String.format(Locale.ROOT, "%s_%d/", ZK_STATE_DIR, id.id);
+        return String.format(Locale.ROOT, "%s_%d", ZK_STATE_DIR, id.id);
     }
 
     /**
@@ -163,17 +163,17 @@ public class BackupFilePaths {
      * @param backupName the specific backup name to create a URI for
      */
     public static URI buildExistingBackupLocationURI(BackupRepository repository, URI location, String backupName) throws IOException {
-        final URI backupNameUri = repository.resolve(location, backupName);
+        final URI backupNameUri = repository.resolveDirectory(location, backupName);
         final String[] entries = repository.listAll(backupNameUri);
         final boolean incremental = ! Arrays.stream(entries).anyMatch(entry -> entry.equals(BackupManager.TRADITIONAL_BACKUP_PROPS_FILE));
         if (incremental) {
             // Incremental backups have an additional URI path component representing the collection that was backed up.
             // This collection directory is the path assumed by other backup code.
             if (entries.length != 1) {
-                throw new IllegalStateException("Incremental backup URI [" + backupNameUri + "] expected to hold a single directory");
+                throw new IllegalStateException("Incremental backup URI [" + backupNameUri + "] expected to hold a single directory. Number found: " + entries.length);
             }
             final String collectionName = entries[0];
-            return repository.resolve(backupNameUri, entries[0]);
+            return repository.resolveDirectory(backupNameUri, entries[0]);
         } else {
             return backupNameUri;
         }
diff --git a/solr/core/src/java/org/apache/solr/core/backup/BackupManager.java b/solr/core/src/java/org/apache/solr/core/backup/BackupManager.java
index 82488ad..470216b 100644
--- a/solr/core/src/java/org/apache/solr/core/backup/BackupManager.java
+++ b/solr/core/src/java/org/apache/solr/core/backup/BackupManager.java
@@ -217,7 +217,7 @@ public class BackupManager {
    */
   public void writeCollectionState(String collectionName,
                                    DocCollection collectionState) throws IOException {
-    URI dest = getZkStateDir(COLLECTION_PROPS_FILE);
+    URI dest = repository.resolve(getZkStateDir(), COLLECTION_PROPS_FILE);
     try (OutputStream collectionStateOs = repository.createOutput(dest)) {
       collectionStateOs.write(Utils.toJSON(Collections.singletonMap(collectionName, collectionState)));
     }
@@ -232,13 +232,11 @@ public class BackupManager {
    */
   public void uploadConfigDir(String sourceConfigName, String targetConfigName)
           throws IOException {
-    URI source = getZkStateDir(CONFIG_STATE_DIR, sourceConfigName);
-    String zkPath = ZkConfigManager.CONFIGS_ZKNODE + "/" + targetConfigName;
-
+    URI source = repository.resolveDirectory(getZkStateDir(), CONFIG_STATE_DIR, sourceConfigName);
     Preconditions.checkState(repository.exists(source), "Path {} does not exist", source);
     Preconditions.checkState(repository.getPathType(source) == PathType.DIRECTORY,
-            "Path {} is not a directory", zkPath);
-    uploadToZk(zkStateReader.getZkClient(), source, zkPath);
+            "Path {} is not a directory", source);
+    uploadToZk(zkStateReader.getZkClient(), source, CONFIG_STATE_DIR + "/" + targetConfigName);
   }
 
   /**
@@ -248,9 +246,9 @@ public class BackupManager {
    * @throws IOException in case of I/O errors.
    */
   public void downloadConfigDir(String configName) throws IOException {
-    URI dest = getZkStateDir(CONFIG_STATE_DIR, configName);
+    URI dest = repository.resolveDirectory(getZkStateDir(), CONFIG_STATE_DIR, configName);
     repository.createDirectory(getZkStateDir());
-    repository.createDirectory(getZkStateDir(CONFIG_STATE_DIR));
+    repository.createDirectory(repository.resolveDirectory(getZkStateDir(), CONFIG_STATE_DIR));
     repository.createDirectory(dest);
 
     downloadFromZK(zkStateReader.getZkClient(), ZkConfigManager.CONFIGS_ZKNODE + "/" + configName, dest);
@@ -276,7 +274,7 @@ public class BackupManager {
   }
 
   public void downloadCollectionProperties(String collectionName) throws IOException {
-    URI dest = getZkStateDir(ZkStateReader.COLLECTION_PROPS_ZKNODE);
+    URI dest = repository.resolve(getZkStateDir(), ZkStateReader.COLLECTION_PROPS_ZKNODE);
     String zkPath = ZkStateReader.COLLECTIONS_ZKNODE + '/' + collectionName + '/' + ZkStateReader.COLLECTION_PROPS_ZKNODE;
 
 
@@ -350,18 +348,14 @@ public class BackupManager {
     }
   }
 
-  private URI getZkStateDir(String... subFolders) {
+  private URI getZkStateDir() {
     URI zkStateDir;
     if (backupId != null) {
       final String zkBackupFolder = BackupFilePaths.getZkStateDir(backupId);
-      zkStateDir = repository.resolve(backupPath, zkBackupFolder);
+      zkStateDir = repository.resolveDirectory(backupPath, zkBackupFolder);
     } else {
-      zkStateDir = repository.resolve(backupPath, ZK_STATE_DIR);
-    }
-
-    if (subFolders.length == 0) {
-      return zkStateDir;
+      zkStateDir = repository.resolveDirectory(backupPath, ZK_STATE_DIR);
     }
-    return repository.resolve(zkStateDir, subFolders);
+    return zkStateDir;
   }
 }
diff --git a/solr/core/src/java/org/apache/solr/core/backup/repository/BackupRepository.java b/solr/core/src/java/org/apache/solr/core/backup/repository/BackupRepository.java
index c526c8a..2a7814b 100644
--- a/solr/core/src/java/org/apache/solr/core/backup/repository/BackupRepository.java
+++ b/solr/core/src/java/org/apache/solr/core/backup/repository/BackupRepository.java
@@ -74,6 +74,17 @@ public interface BackupRepository extends NamedListInitializedPlugin, Closeable
   URI createURI(String path);
 
   /**
+   * This method returns the directory URI representation for the specified path.
+   * Note - the specified path could be a fully qualified URI OR a relative path for a file-system.
+   *
+   * @param path The path specified by the user.
+   * @return the URI representation of the user supplied value, ensured to look like a directory.
+   */
+  default URI createDirectoryURI(String path) {
+    return createURI(path);
+  }
+
+  /**
    * This method resolves a URI using the specified path components (as method arguments).
    *
    * @param baseUri The base URI to use for creating the path
@@ -84,6 +95,18 @@ public interface BackupRepository extends NamedListInitializedPlugin, Closeable
   URI resolve(URI baseUri, String... pathComponents);
 
   /**
+   * This method resolves a directory URI using the specified path components (as method arguments).
+   *
+   * @param baseUri The base URI to use for creating the path
+   * @param pathComponents
+   *          The directory (or file-name) to be included in the URI.
+   * @return A URI containing absolute path, ensured to look like a directory
+   */
+  default URI resolveDirectory(URI baseUri, String... pathComponents) {
+    return resolve(baseUri, pathComponents);
+  }
+
+  /**
    * This method checks if the specified path exists in this repository.
    *
    * @param path
diff --git a/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java b/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
index 752c663..6fee3dc 100644
--- a/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
@@ -504,7 +504,7 @@ public class ReplicationHandler extends RequestHandlerBase implements SolrCoreAw
       core.getCoreContainer().assertPathAllowed(Paths.get(location));
     }
 
-    URI locationUri = repo.createURI(location);
+    URI locationUri = repo.createDirectoryURI(location);
 
     //If name is not provided then look for the last unnamed( the ones with the snapshot.timestamp format)
     //snapshot folder since we allow snapshots to be taken without providing a name. Pick the latest timestamp.
@@ -615,7 +615,7 @@ public class ReplicationHandler extends RequestHandlerBase implements SolrCoreAw
       }
 
         // small race here before the commit point is saved
-      URI locationUri = repo.createURI(location);
+      URI locationUri = repo.createDirectoryURI(location);
       String commitName = params.get(CoreAdminParams.COMMIT_NAME);
       SnapShooter snapShooter = new SnapShooter(repo, core, locationUri, params.get(NAME), commitName);
       snapShooter.validateCreateSnapshot();
diff --git a/solr/core/src/java/org/apache/solr/handler/RestoreCore.java b/solr/core/src/java/org/apache/solr/handler/RestoreCore.java
index 25b559e..2750745 100644
--- a/solr/core/src/java/org/apache/solr/handler/RestoreCore.java
+++ b/solr/core/src/java/org/apache/solr/handler/RestoreCore.java
@@ -57,7 +57,7 @@ public class RestoreCore implements Callable<Boolean> {
   }
 
   public static RestoreCore create(BackupRepository backupRepo, SolrCore core, URI location, String backupname) {
-    RestoreRepository repository = new BasicRestoreRepository(backupRepo.resolve(location, backupname), backupRepo);
+    RestoreRepository repository = new BasicRestoreRepository(backupRepo.resolveDirectory(location, backupname), backupRepo);
     return new RestoreCore(core, repository);
   }
 
diff --git a/solr/core/src/java/org/apache/solr/handler/SnapShooter.java b/solr/core/src/java/org/apache/solr/handler/SnapShooter.java
index 3d2a4bb..1abba86 100644
--- a/solr/core/src/java/org/apache/solr/handler/SnapShooter.java
+++ b/solr/core/src/java/org/apache/solr/handler/SnapShooter.java
@@ -95,7 +95,7 @@ public class SnapShooter {
       SimpleDateFormat fmt = new SimpleDateFormat(DATE_FMT, Locale.ROOT);
       directoryName = "snapshot." + fmt.format(new Date());
     }
-    this.snapshotDirPath = backupRepo.resolve(location, directoryName);
+    this.snapshotDirPath = backupRepo.resolveDirectory(location, directoryName);
     this.commitName = commitName;
   }
 
@@ -120,7 +120,7 @@ public class SnapShooter {
       paths = backupRepo.listAll(baseSnapDirPath);
       for (String path : paths) {
         if (path.equals(this.directoryName)
-            && backupRepo.getPathType(baseSnapDirPath.resolve(path)) == PathType.DIRECTORY) {
+            && backupRepo.getPathType(backupRepo.resolveDirectory(baseSnapDirPath, path)) == PathType.DIRECTORY) {
           dirFound = true;
           break;
         }
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/BackupCoreOp.java b/solr/core/src/java/org/apache/solr/handler/admin/BackupCoreOp.java
index 1bf7b77..9868f4a 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/BackupCoreOp.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/BackupCoreOp.java
@@ -57,7 +57,8 @@ class BackupCoreOp implements CoreAdminHandler.CoreAdminOp {
                 + " parameter or as a default repository property");
       }
 
-      URI locationUri = repository.createURI(location);
+      URI locationUri = repository.createDirectoryURI(location);
+      repository.createDirectory(locationUri);
 
       if (incremental) {
         if ("file".equals(locationUri.getScheme())) {
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
index 0d2b0ea..982b3ed 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
@@ -1128,7 +1128,7 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
       boolean incremental = req.getParams().getBool(CoreAdminParams.BACKUP_INCREMENTAL, true);
 
       // Check if the specified location is valid for this repository.
-      final URI uri = repository.createURI(location);
+      final URI uri = repository.createDirectoryURI(location);
       try {
         if (!repository.exists(uri)) {
           throw new SolrException(ErrorCode.SERVER_ERROR, "specified location " + uri + " does not exist.");
@@ -1177,13 +1177,13 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
       }
 
       // Check if the specified location is valid for this repository.
-      final URI uri = repository.createURI(location);
+      final URI uri = repository.createDirectoryURI(location);
       try {
         if (!repository.exists(uri)) {
           throw new SolrException(ErrorCode.SERVER_ERROR, "specified location " + uri + " does not exist.");
         }
       } catch (IOException ex) {
-        throw new SolrException(ErrorCode.SERVER_ERROR, "Failed to check the existance of " + uri + ". Is it valid?", ex);
+        throw new SolrException(ErrorCode.SERVER_ERROR, "Failed to check the existence of " + uri + ". Is it valid?", ex);
       }
 
       final String createNodeArg = req.getParams().get(CREATE_NODE_SET);
@@ -1229,13 +1229,13 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
         }
 
         // Check if the specified location is valid for this repository.
-        URI uri = repository.createURI(location);
+        URI uri = repository.createDirectoryURI(location);
         try {
           if (!repository.exists(uri)) {
             throw new SolrException(ErrorCode.BAD_REQUEST, "specified location " + uri + " does not exist.");
           }
         } catch (IOException ex) {
-          throw new SolrException(ErrorCode.SERVER_ERROR, "Failed to check the existance of " + uri + ". Is it valid?", ex);
+          throw new SolrException(ErrorCode.SERVER_ERROR, "Failed to check the existence of " + uri + ". Is it valid?", ex);
         }
 
         int deletionModesProvided = 0;
@@ -1277,13 +1277,13 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
         }
 
         String backupName = req.getParams().get(NAME);
-        final URI locationURI = repository.createURI(location);
+        final URI locationURI = repository.createDirectoryURI(location);
         try {
           if (!repository.exists(locationURI)) {
             throw new SolrException(ErrorCode.BAD_REQUEST, "specified location " + locationURI + " does not exist.");
           }
         } catch (IOException ex) {
-          throw new SolrException(ErrorCode.SERVER_ERROR, "Failed to check the existance of " + locationURI + ". Is it valid?", ex);
+          throw new SolrException(ErrorCode.SERVER_ERROR, "Failed to check the existence of " + locationURI + ". Is it valid?", ex);
         }
         URI backupLocation = BackupFilePaths.buildExistingBackupLocationURI(repository, locationURI, backupName);
         if (repository.exists(repository.resolve(backupLocation, BackupManager.TRADITIONAL_BACKUP_PROPS_FILE))) {
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/RestoreCoreOp.java b/solr/core/src/java/org/apache/solr/handler/admin/RestoreCoreOp.java
index 32f52d5..37fbe84 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/RestoreCoreOp.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/RestoreCoreOp.java
@@ -60,7 +60,7 @@ class RestoreCoreOp implements CoreAdminHandler.CoreAdminOp {
                 + " parameter or as a default repository property");
       }
 
-      URI locationUri = repository.createURI(location);
+      URI locationUri = repository.createDirectoryURI(location);
       CloudDescriptor cd = core.getCoreDescriptor().getCloudDescriptor();
       // this core must be the only replica in its shard otherwise
       // we cannot guarantee consistency between replicas because when we add data (or restore index) to this replica
diff --git a/solr/core/src/java/org/apache/solr/response/SmileResponseWriter.java b/solr/core/src/java/org/apache/solr/response/SmileResponseWriter.java
index ed5a6dc..043467e 100644
--- a/solr/core/src/java/org/apache/solr/response/SmileResponseWriter.java
+++ b/solr/core/src/java/org/apache/solr/response/SmileResponseWriter.java
@@ -60,8 +60,6 @@ public class SmileResponseWriter extends BinaryResponseWriter {
 
     @Override
     public void writeResponse() throws IOException {
-      //we always write header , it is just 4 bytes and not worth optimizing
-      gen.writeHeader();
       super.writeNamedList(null, rsp.getValues());
       gen.close();
     }
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestHdfsCloudBackupRestore.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestHdfsCloudBackupRestore.java
index 67cc6ae..7c5a831 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestHdfsCloudBackupRestore.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestHdfsCloudBackupRestore.java
@@ -195,7 +195,7 @@ public class TestHdfsCloudBackupRestore extends AbstractCloudBackupRestoreTestCa
     HdfsBackupRepository repo = new HdfsBackupRepository();
     repo.init(new NamedList<>(params));
 
-    URI baseLoc = repo.createURI("/backup");
+    URI baseLoc = repo.createDirectoryURI("/backup");
 
     BackupManager mgr = BackupManager.forRestore(repo, solrClient.getZkStateReader(), repo.resolve(baseLoc, backupName));
     BackupProperties props = mgr.readBackupProperties();
diff --git a/solr/core/src/test/org/apache/solr/handler/TestIncrementalCoreBackup.java b/solr/core/src/test/org/apache/solr/handler/TestIncrementalCoreBackup.java
index 31a904a..479fafb 100644
--- a/solr/core/src/test/org/apache/solr/handler/TestIncrementalCoreBackup.java
+++ b/solr/core/src/test/org/apache/solr/handler/TestIncrementalCoreBackup.java
@@ -367,7 +367,7 @@ public class TestIncrementalCoreBackup extends SolrTestCaseJ4 {
         final String locationPathStr = locationPath.toString();
         h.getCoreContainer().getAllowPaths().add(locationPath);
         try (BackupRepository backupRepo = h.getCoreContainer().newBackupRepository(Optional.empty())) {
-            final URI locationUri = backupRepo.createURI(locationPathStr);
+            final URI locationUri = backupRepo.createDirectoryURI(locationPathStr);
             final BackupFilePaths backupFilePaths = new BackupFilePaths(backupRepo, locationUri);
             backupFilePaths.createIncrementalBackupFolders();
             return locationUri;
diff --git a/solr/licenses/HdrHistogram-2.1.12.jar.sha1 b/solr/licenses/HdrHistogram-2.1.12.jar.sha1
new file mode 100644
index 0000000..203aa02
--- /dev/null
+++ b/solr/licenses/HdrHistogram-2.1.12.jar.sha1
@@ -0,0 +1 @@
+6eb7552156e0d517ae80cc2247be1427c8d90452
diff --git a/solr/licenses/HdrHistogram-LICENSE-PD.txt b/solr/licenses/HdrHistogram-LICENSE-PD.txt
new file mode 100644
index 0000000..1cd0975
--- /dev/null
+++ b/solr/licenses/HdrHistogram-LICENSE-PD.txt
@@ -0,0 +1,3 @@
+The code in this repository code was Written by Gil Tene, Michael Barker,
+and Matt Warren, and released to the public domain, as explained at
+http://creativecommons.org/publicdomain/zero/1.0/
diff --git a/solr/licenses/HdrHistogram-NOTICE.txt b/solr/licenses/HdrHistogram-NOTICE.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/solr/licenses/HdrHistogram-NOTICE.txt
@@ -0,0 +1 @@
+
diff --git a/solr/licenses/LatencyUtils-2.0.3.jar.sha1 b/solr/licenses/LatencyUtils-2.0.3.jar.sha1
new file mode 100644
index 0000000..e7e31e3
--- /dev/null
+++ b/solr/licenses/LatencyUtils-2.0.3.jar.sha1
@@ -0,0 +1 @@
+769c0b82cb2421c8256300e907298a9410a2a3d3
diff --git a/solr/licenses/LatencyUtils-LICENSE-PD.txt b/solr/licenses/LatencyUtils-LICENSE-PD.txt
new file mode 100644
index 0000000..785066c
--- /dev/null
+++ b/solr/licenses/LatencyUtils-LICENSE-PD.txt
@@ -0,0 +1,3 @@
+
+  * This code was Written by Gil Tene of Azul Systems, and released to the
+  * public domain, as explained at http://creativecommons.org/publicdomain/zero/1.0/
diff --git a/solr/licenses/LatencyUtils-NOTICE.txt b/solr/licenses/LatencyUtils-NOTICE.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/solr/licenses/LatencyUtils-NOTICE.txt
@@ -0,0 +1 @@
+
diff --git a/solr/licenses/annotations-2.16.93.jar.sha1 b/solr/licenses/annotations-2.16.93.jar.sha1
new file mode 100644
index 0000000..db6be88
--- /dev/null
+++ b/solr/licenses/annotations-2.16.93.jar.sha1
@@ -0,0 +1 @@
+d82c783d3106b7d6f1c0db51dcee7075ae1a4b34
diff --git a/solr/licenses/apache-client-2.16.93.jar.sha1 b/solr/licenses/apache-client-2.16.93.jar.sha1
new file mode 100644
index 0000000..065efaf
--- /dev/null
+++ b/solr/licenses/apache-client-2.16.93.jar.sha1
@@ -0,0 +1 @@
+2220df06b69e797a75b6acbbbcfeae0c0ce4066a
diff --git a/solr/licenses/apache-client-LICENSE-ASL.txt b/solr/licenses/apache-client-LICENSE-ASL.txt
new file mode 100644
index 0000000..1eef70a
--- /dev/null
+++ b/solr/licenses/apache-client-LICENSE-ASL.txt
@@ -0,0 +1,206 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
+
+   Note: Other license terms may apply to certain, identified software files contained within or distributed
+   with the accompanying software if such terms are included in the directory containing the accompanying software.
+   Such other license terms will then apply in lieu of the terms of the software license above.
diff --git a/solr/licenses/apache-client-NOTICE.txt b/solr/licenses/apache-client-NOTICE.txt
new file mode 100644
index 0000000..7b5a068
--- /dev/null
+++ b/solr/licenses/apache-client-NOTICE.txt
@@ -0,0 +1,25 @@
+AWS SDK for Java 2.0
+Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+This product includes software developed by
+Amazon Technologies, Inc (http://www.amazon.com/).
+
+**********************
+THIRD PARTY COMPONENTS
+**********************
+This software includes third party software subject to the following copyrights:
+- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty.
+- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc.
+- Apache Commons Lang - https://github.com/apache/commons-lang
+- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams
+- Jackson-core - https://github.com/FasterXML/jackson-core
+- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary
+
+The licenses for these third party components are included in LICENSE.txt
+
+- For Apache Commons Lang see also this required NOTICE:
+  Apache Commons Lang
+  Copyright 2001-2020 The Apache Software Foundation
+  
+  This product includes software developed at
+  The Apache Software Foundation (https://www.apache.org/).
diff --git a/solr/licenses/arns-2.16.93.jar.sha1 b/solr/licenses/arns-2.16.93.jar.sha1
new file mode 100644
index 0000000..33c6c30
--- /dev/null
+++ b/solr/licenses/arns-2.16.93.jar.sha1
@@ -0,0 +1 @@
+42bd656446bee5dd10ded2559a2238ade359e265
diff --git a/solr/licenses/arns-LICENSE-ASL.txt b/solr/licenses/arns-LICENSE-ASL.txt
new file mode 100644
index 0000000..1eef70a
--- /dev/null
+++ b/solr/licenses/arns-LICENSE-ASL.txt
@@ -0,0 +1,206 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
+
+   Note: Other license terms may apply to certain, identified software files contained within or distributed
+   with the accompanying software if such terms are included in the directory containing the accompanying software.
+   Such other license terms will then apply in lieu of the terms of the software license above.
diff --git a/solr/licenses/arns-NOTICE.txt b/solr/licenses/arns-NOTICE.txt
new file mode 100644
index 0000000..7b5a068
--- /dev/null
+++ b/solr/licenses/arns-NOTICE.txt
@@ -0,0 +1,25 @@
+AWS SDK for Java 2.0
+Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+This product includes software developed by
+Amazon Technologies, Inc (http://www.amazon.com/).
+
+**********************
+THIRD PARTY COMPONENTS
+**********************
+This software includes third party software subject to the following copyrights:
+- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty.
+- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc.
+- Apache Commons Lang - https://github.com/apache/commons-lang
+- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams
+- Jackson-core - https://github.com/FasterXML/jackson-core
+- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary
+
+The licenses for these third party components are included in LICENSE.txt
+
+- For Apache Commons Lang see also this required NOTICE:
+  Apache Commons Lang
+  Copyright 2001-2020 The Apache Software Foundation
+  
+  This product includes software developed at
+  The Apache Software Foundation (https://www.apache.org/).
diff --git a/solr/licenses/auth-2.16.93.jar.sha1 b/solr/licenses/auth-2.16.93.jar.sha1
new file mode 100644
index 0000000..0d3793c
--- /dev/null
+++ b/solr/licenses/auth-2.16.93.jar.sha1
@@ -0,0 +1 @@
+0b90309577ca250cd765e34c0235871884aae63f
diff --git a/solr/licenses/auth-LICENSE-ASL.txt b/solr/licenses/auth-LICENSE-ASL.txt
new file mode 100644
index 0000000..1eef70a
--- /dev/null
+++ b/solr/licenses/auth-LICENSE-ASL.txt
@@ -0,0 +1,206 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
+
+   Note: Other license terms may apply to certain, identified software files contained within or distributed
+   with the accompanying software if such terms are included in the directory containing the accompanying software.
+   Such other license terms will then apply in lieu of the terms of the software license above.
diff --git a/solr/licenses/auth-NOTICE.txt b/solr/licenses/auth-NOTICE.txt
new file mode 100644
index 0000000..7b5a068
--- /dev/null
+++ b/solr/licenses/auth-NOTICE.txt
@@ -0,0 +1,25 @@
+AWS SDK for Java 2.0
+Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+This product includes software developed by
+Amazon Technologies, Inc (http://www.amazon.com/).
+
+**********************
+THIRD PARTY COMPONENTS
+**********************
+This software includes third party software subject to the following copyrights:
+- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty.
+- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc.
+- Apache Commons Lang - https://github.com/apache/commons-lang
+- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams
+- Jackson-core - https://github.com/FasterXML/jackson-core
+- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary
+
+The licenses for these third party components are included in LICENSE.txt
+
+- For Apache Commons Lang see also this required NOTICE:
+  Apache Commons Lang
+  Copyright 2001-2020 The Apache Software Foundation
+  
+  This product includes software developed at
+  The Apache Software Foundation (https://www.apache.org/).
diff --git a/solr/licenses/aws-core-2.16.93.jar.sha1 b/solr/licenses/aws-core-2.16.93.jar.sha1
new file mode 100644
index 0000000..7fa96f7
--- /dev/null
+++ b/solr/licenses/aws-core-2.16.93.jar.sha1
@@ -0,0 +1 @@
+bd338bb4096ce58aa699fef9062bdca48d21f681
diff --git a/solr/licenses/aws-core-LICENSE-ASL.txt b/solr/licenses/aws-core-LICENSE-ASL.txt
new file mode 100644
index 0000000..22d244f
--- /dev/null
+++ b/solr/licenses/aws-core-LICENSE-ASL.txt
@@ -0,0 +1,53 @@
+Apache License
+Version 2.0, January 2004
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or it [...]
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combin [...]
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+   1.   You must give any other recipients of the Work or Derivative Works a copy of this License; and
+   2.   You must cause any modified files to carry prominent notices stating that You changed the files; and
+   3.   You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+   4.   If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Work [...]
+
+You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the [...]
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limit [...]
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor h [...]
+
+END OF TERMS AND CONDITIONS
+
+Note: Other license terms may apply to certain, identified software files contained within or distributed with the accompanying software if such terms are included in the directory containing the accompanying software. Such other license terms will then apply in lieu of the terms of the software license above.
diff --git a/solr/licenses/aws-core-NOTICE.txt b/solr/licenses/aws-core-NOTICE.txt
new file mode 100644
index 0000000..303d412
--- /dev/null
+++ b/solr/licenses/aws-core-NOTICE.txt
@@ -0,0 +1,14 @@
+AWS SDK for Java
+Copyright 2010-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+This product includes software developed by
+Amazon Technologies, Inc (http://www.amazon.com/).
+
+**********************
+THIRD PARTY COMPONENTS
+**********************
+This software includes third party software subject to the following copyrights:
+- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty.
+- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc.
+
+The licenses for these third party components are included in LICENSE.txt
diff --git a/solr/licenses/aws-java-sdk-core-1.12.42.jar.sha1 b/solr/licenses/aws-java-sdk-core-1.12.42.jar.sha1
new file mode 100644
index 0000000..641241f
--- /dev/null
+++ b/solr/licenses/aws-java-sdk-core-1.12.42.jar.sha1
@@ -0,0 +1 @@
+c7df8d6912540c32cc7db4bf3446f3c6834561f1
diff --git a/solr/licenses/aws-java-sdk-core-LICENSE-ASL.txt b/solr/licenses/aws-java-sdk-core-LICENSE-ASL.txt
new file mode 100644
index 0000000..22d244f
--- /dev/null
+++ b/solr/licenses/aws-java-sdk-core-LICENSE-ASL.txt
@@ -0,0 +1,53 @@
+Apache License
+Version 2.0, January 2004
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or it [...]
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combin [...]
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+   1.   You must give any other recipients of the Work or Derivative Works a copy of this License; and
+   2.   You must cause any modified files to carry prominent notices stating that You changed the files; and
+   3.   You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+   4.   If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Work [...]
+
+You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the [...]
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limit [...]
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor h [...]
+
+END OF TERMS AND CONDITIONS
+
+Note: Other license terms may apply to certain, identified software files contained within or distributed with the accompanying software if such terms are included in the directory containing the accompanying software. Such other license terms will then apply in lieu of the terms of the software license above.
diff --git a/solr/licenses/aws-java-sdk-core-NOTICE.txt b/solr/licenses/aws-java-sdk-core-NOTICE.txt
new file mode 100644
index 0000000..303d412
--- /dev/null
+++ b/solr/licenses/aws-java-sdk-core-NOTICE.txt
@@ -0,0 +1,14 @@
+AWS SDK for Java
+Copyright 2010-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+This product includes software developed by
+Amazon Technologies, Inc (http://www.amazon.com/).
+
+**********************
+THIRD PARTY COMPONENTS
+**********************
+This software includes third party software subject to the following copyrights:
+- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty.
+- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc.
+
+The licenses for these third party components are included in LICENSE.txt
diff --git a/solr/licenses/aws-java-sdk-kms-1.12.42.jar.sha1 b/solr/licenses/aws-java-sdk-kms-1.12.42.jar.sha1
new file mode 100644
index 0000000..3693a5b
--- /dev/null
+++ b/solr/licenses/aws-java-sdk-kms-1.12.42.jar.sha1
@@ -0,0 +1 @@
+b5dd2930f26f3ec06b8826eaf4576e11687f8cee
diff --git a/solr/licenses/aws-java-sdk-kms-LICENSE-ASL.txt b/solr/licenses/aws-java-sdk-kms-LICENSE-ASL.txt
new file mode 100644
index 0000000..22d244f
--- /dev/null
+++ b/solr/licenses/aws-java-sdk-kms-LICENSE-ASL.txt
@@ -0,0 +1,53 @@
+Apache License
+Version 2.0, January 2004
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or it [...]
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combin [...]
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+   1.   You must give any other recipients of the Work or Derivative Works a copy of this License; and
+   2.   You must cause any modified files to carry prominent notices stating that You changed the files; and
+   3.   You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+   4.   If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Work [...]
+
+You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the [...]
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limit [...]
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor h [...]
+
+END OF TERMS AND CONDITIONS
+
+Note: Other license terms may apply to certain, identified software files contained within or distributed with the accompanying software if such terms are included in the directory containing the accompanying software. Such other license terms will then apply in lieu of the terms of the software license above.
diff --git a/solr/licenses/aws-java-sdk-kms-NOTICE.txt b/solr/licenses/aws-java-sdk-kms-NOTICE.txt
new file mode 100644
index 0000000..303d412
--- /dev/null
+++ b/solr/licenses/aws-java-sdk-kms-NOTICE.txt
@@ -0,0 +1,14 @@
+AWS SDK for Java
+Copyright 2010-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+This product includes software developed by
+Amazon Technologies, Inc (http://www.amazon.com/).
+
+**********************
+THIRD PARTY COMPONENTS
+**********************
+This software includes third party software subject to the following copyrights:
+- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty.
+- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc.
+
+The licenses for these third party components are included in LICENSE.txt
diff --git a/solr/licenses/aws-java-sdk-s3-1.12.42.jar.sha1 b/solr/licenses/aws-java-sdk-s3-1.12.42.jar.sha1
new file mode 100644
index 0000000..05f7ce7
--- /dev/null
+++ b/solr/licenses/aws-java-sdk-s3-1.12.42.jar.sha1
@@ -0,0 +1 @@
+fe85186a255b469ff3e31174a6ac777e67b1ccfd
diff --git a/solr/licenses/aws-java-sdk-s3-LICENSE-ASL.txt b/solr/licenses/aws-java-sdk-s3-LICENSE-ASL.txt
new file mode 100644
index 0000000..22d244f
--- /dev/null
+++ b/solr/licenses/aws-java-sdk-s3-LICENSE-ASL.txt
@@ -0,0 +1,53 @@
+Apache License
+Version 2.0, January 2004
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or it [...]
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combin [...]
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+   1.   You must give any other recipients of the Work or Derivative Works a copy of this License; and
+   2.   You must cause any modified files to carry prominent notices stating that You changed the files; and
+   3.   You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+   4.   If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Work [...]
+
+You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the [...]
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limit [...]
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor h [...]
+
+END OF TERMS AND CONDITIONS
+
+Note: Other license terms may apply to certain, identified software files contained within or distributed with the accompanying software if such terms are included in the directory containing the accompanying software. Such other license terms will then apply in lieu of the terms of the software license above.
diff --git a/solr/licenses/aws-java-sdk-s3-NOTICE.txt b/solr/licenses/aws-java-sdk-s3-NOTICE.txt
new file mode 100644
index 0000000..303d412
--- /dev/null
+++ b/solr/licenses/aws-java-sdk-s3-NOTICE.txt
@@ -0,0 +1,14 @@
+AWS SDK for Java
+Copyright 2010-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+This product includes software developed by
+Amazon Technologies, Inc (http://www.amazon.com/).
+
+**********************
+THIRD PARTY COMPONENTS
+**********************
+This software includes third party software subject to the following copyrights:
+- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty.
+- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc.
+
+The licenses for these third party components are included in LICENSE.txt
diff --git a/solr/licenses/aws-query-protocol-2.16.93.jar.sha1 b/solr/licenses/aws-query-protocol-2.16.93.jar.sha1
new file mode 100644
index 0000000..3432dda
--- /dev/null
+++ b/solr/licenses/aws-query-protocol-2.16.93.jar.sha1
@@ -0,0 +1 @@
+13f5747f759f477b6490c7c98d20db329dd4f931
diff --git a/solr/licenses/aws-query-protocol-LICENSE-ASL.txt b/solr/licenses/aws-query-protocol-LICENSE-ASL.txt
new file mode 100644
index 0000000..22d244f
--- /dev/null
+++ b/solr/licenses/aws-query-protocol-LICENSE-ASL.txt
@@ -0,0 +1,53 @@
+Apache License
+Version 2.0, January 2004
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or it [...]
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combin [...]
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+   1.   You must give any other recipients of the Work or Derivative Works a copy of this License; and
+   2.   You must cause any modified files to carry prominent notices stating that You changed the files; and
+   3.   You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+   4.   If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Work [...]
+
+You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the [...]
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limit [...]
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor h [...]
+
+END OF TERMS AND CONDITIONS
+
+Note: Other license terms may apply to certain, identified software files contained within or distributed with the accompanying software if such terms are included in the directory containing the accompanying software. Such other license terms will then apply in lieu of the terms of the software license above.
diff --git a/solr/licenses/aws-query-protocol-NOTICE.txt b/solr/licenses/aws-query-protocol-NOTICE.txt
new file mode 100644
index 0000000..303d412
--- /dev/null
+++ b/solr/licenses/aws-query-protocol-NOTICE.txt
@@ -0,0 +1,14 @@
+AWS SDK for Java
+Copyright 2010-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+This product includes software developed by
+Amazon Technologies, Inc (http://www.amazon.com/).
+
+**********************
+THIRD PARTY COMPONENTS
+**********************
+This software includes third party software subject to the following copyrights:
+- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty.
+- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc.
+
+The licenses for these third party components are included in LICENSE.txt
diff --git a/solr/licenses/aws-xml-protocol-2.16.93.jar.sha1 b/solr/licenses/aws-xml-protocol-2.16.93.jar.sha1
new file mode 100644
index 0000000..1ec582f
--- /dev/null
+++ b/solr/licenses/aws-xml-protocol-2.16.93.jar.sha1
@@ -0,0 +1 @@
+eda32ce27be35ff773e9c26f582284eda83b830b
diff --git a/solr/licenses/aws-xml-protocol-LICENSE-ASL.txt b/solr/licenses/aws-xml-protocol-LICENSE-ASL.txt
new file mode 100644
index 0000000..22d244f
--- /dev/null
+++ b/solr/licenses/aws-xml-protocol-LICENSE-ASL.txt
@@ -0,0 +1,53 @@
+Apache License
+Version 2.0, January 2004
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or it [...]
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combin [...]
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+   1.   You must give any other recipients of the Work or Derivative Works a copy of this License; and
+   2.   You must cause any modified files to carry prominent notices stating that You changed the files; and
+   3.   You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+   4.   If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Work [...]
+
+You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the [...]
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limit [...]
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor h [...]
+
+END OF TERMS AND CONDITIONS
+
+Note: Other license terms may apply to certain, identified software files contained within or distributed with the accompanying software if such terms are included in the directory containing the accompanying software. Such other license terms will then apply in lieu of the terms of the software license above.
diff --git a/solr/licenses/aws-xml-protocol-NOTICE.txt b/solr/licenses/aws-xml-protocol-NOTICE.txt
new file mode 100644
index 0000000..303d412
--- /dev/null
+++ b/solr/licenses/aws-xml-protocol-NOTICE.txt
@@ -0,0 +1,14 @@
+AWS SDK for Java
+Copyright 2010-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+This product includes software developed by
+Amazon Technologies, Inc (http://www.amazon.com/).
+
+**********************
+THIRD PARTY COMPONENTS
+**********************
+This software includes third party software subject to the following copyrights:
+- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty.
+- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc.
+
+The licenses for these third party components are included in LICENSE.txt
diff --git a/solr/licenses/eventstream-1.0.1.jar.sha1 b/solr/licenses/eventstream-1.0.1.jar.sha1
new file mode 100644
index 0000000..a3e7cd7
--- /dev/null
+++ b/solr/licenses/eventstream-1.0.1.jar.sha1
@@ -0,0 +1 @@
+6ff8649dffc5190366ada897ba8525a836297784
diff --git a/solr/licenses/eventstream-LICENSE-ASL.txt b/solr/licenses/eventstream-LICENSE-ASL.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/solr/licenses/eventstream-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
diff --git a/solr/licenses/eventstream-NOTICE.txt b/solr/licenses/eventstream-NOTICE.txt
new file mode 100644
index 0000000..1a066ac
--- /dev/null
+++ b/solr/licenses/eventstream-NOTICE.txt
@@ -0,0 +1,2 @@
+AWS EventStream for Java
+Copyright 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
diff --git a/solr/licenses/hamcrest-core-2.2.jar.sha1 b/solr/licenses/hamcrest-core-2.2.jar.sha1
new file mode 100644
index 0000000..8afb604
--- /dev/null
+++ b/solr/licenses/hamcrest-core-2.2.jar.sha1
@@ -0,0 +1 @@
+3f2bd07716a31c395e2837254f37f21f0f0ab24b
diff --git a/solr/licenses/http-client-spi-2.16.93.jar.sha1 b/solr/licenses/http-client-spi-2.16.93.jar.sha1
new file mode 100644
index 0000000..2141fc0
--- /dev/null
+++ b/solr/licenses/http-client-spi-2.16.93.jar.sha1
@@ -0,0 +1 @@
+cb8b9047e05e416ca1eb00255772a27da5118a61
diff --git a/solr/licenses/http-client-spi-LICENSE-ASL.txt b/solr/licenses/http-client-spi-LICENSE-ASL.txt
new file mode 100644
index 0000000..1eef70a
--- /dev/null
+++ b/solr/licenses/http-client-spi-LICENSE-ASL.txt
@@ -0,0 +1,206 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
+
+   Note: Other license terms may apply to certain, identified software files contained within or distributed
+   with the accompanying software if such terms are included in the directory containing the accompanying software.
+   Such other license terms will then apply in lieu of the terms of the software license above.
diff --git a/solr/licenses/http-client-spi-NOTICE.txt b/solr/licenses/http-client-spi-NOTICE.txt
new file mode 100644
index 0000000..7b5a068
--- /dev/null
+++ b/solr/licenses/http-client-spi-NOTICE.txt
@@ -0,0 +1,25 @@
+AWS SDK for Java 2.0
+Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+This product includes software developed by
+Amazon Technologies, Inc (http://www.amazon.com/).
+
+**********************
+THIRD PARTY COMPONENTS
+**********************
+This software includes third party software subject to the following copyrights:
+- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty.
+- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc.
+- Apache Commons Lang - https://github.com/apache/commons-lang
+- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams
+- Jackson-core - https://github.com/FasterXML/jackson-core
+- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary
+
+The licenses for these third party components are included in LICENSE.txt
+
+- For Apache Commons Lang see also this required NOTICE:
+  Apache Commons Lang
+  Copyright 2001-2020 The Apache Software Foundation
+  
+  This product includes software developed at
+  The Apache Software Foundation (https://www.apache.org/).
diff --git a/solr/licenses/httpcore-4.4.13.jar.sha1 b/solr/licenses/httpcore-4.4.13.jar.sha1
deleted file mode 100644
index cffee03..0000000
--- a/solr/licenses/httpcore-4.4.13.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-853b96d3afbb7bf8cc303fe27ee96836a10c1834
diff --git a/solr/licenses/httpcore-4.4.14.jar.sha1 b/solr/licenses/httpcore-4.4.14.jar.sha1
new file mode 100644
index 0000000..85629d5
--- /dev/null
+++ b/solr/licenses/httpcore-4.4.14.jar.sha1
@@ -0,0 +1 @@
+9dd1a631c082d92ecd4bd8fd4cf55026c720a8c1
diff --git a/solr/licenses/ion-java-1.0.2.jar.sha1 b/solr/licenses/ion-java-1.0.2.jar.sha1
new file mode 100644
index 0000000..e7881f4
--- /dev/null
+++ b/solr/licenses/ion-java-1.0.2.jar.sha1
@@ -0,0 +1 @@
+ee9dacea7726e495f8352b81c12c23834ffbc564
diff --git a/solr/licenses/ion-java-LICENSE-ASL.txt b/solr/licenses/ion-java-LICENSE-ASL.txt
new file mode 100644
index 0000000..d9a10c0
--- /dev/null
+++ b/solr/licenses/ion-java-LICENSE-ASL.txt
@@ -0,0 +1,176 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
diff --git a/solr/licenses/ion-java-NOTICE.txt b/solr/licenses/ion-java-NOTICE.txt
new file mode 100644
index 0000000..618e32e
--- /dev/null
+++ b/solr/licenses/ion-java-NOTICE.txt
@@ -0,0 +1,2 @@
+Amazon Ion Java
+Copyright 2007-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
diff --git a/solr/licenses/jackson-annotations-2.12.3.jar.sha1 b/solr/licenses/jackson-annotations-2.12.3.jar.sha1
new file mode 100644
index 0000000..de7b361
--- /dev/null
+++ b/solr/licenses/jackson-annotations-2.12.3.jar.sha1
@@ -0,0 +1 @@
+7275513412694a1aafd08c0287f48469fa0e6e17
diff --git a/solr/licenses/jackson-core-2.12.3.jar.sha1 b/solr/licenses/jackson-core-2.12.3.jar.sha1
new file mode 100644
index 0000000..8d21e9b
--- /dev/null
+++ b/solr/licenses/jackson-core-2.12.3.jar.sha1
@@ -0,0 +1 @@
+deb23fe2a7f2b773e18ced2b50d4acc1df8fa366
diff --git a/solr/licenses/jackson-databind-2.12.3.jar.sha1 b/solr/licenses/jackson-databind-2.12.3.jar.sha1
new file mode 100644
index 0000000..3c762ab
--- /dev/null
+++ b/solr/licenses/jackson-databind-2.12.3.jar.sha1
@@ -0,0 +1 @@
+d6153f8fc60c479ab0f9efb35c034526436a4953
diff --git a/solr/licenses/jackson-dataformat-cbor-2.12.3.jar.sha1 b/solr/licenses/jackson-dataformat-cbor-2.12.3.jar.sha1
new file mode 100644
index 0000000..4edbe76
--- /dev/null
+++ b/solr/licenses/jackson-dataformat-cbor-2.12.3.jar.sha1
@@ -0,0 +1 @@
+d72a74232dd4cb9cd7b07fdec3bc87bf0078491f
diff --git a/solr/licenses/jackson-dataformat-cbor-LICENSE-ASL.txt b/solr/licenses/jackson-dataformat-cbor-LICENSE-ASL.txt
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/solr/licenses/jackson-dataformat-cbor-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
diff --git a/solr/licenses/jackson-dataformat-cbor-NOTICE.txt b/solr/licenses/jackson-dataformat-cbor-NOTICE.txt
new file mode 100644
index 0000000..8c71682
--- /dev/null
+++ b/solr/licenses/jackson-dataformat-cbor-NOTICE.txt
@@ -0,0 +1,20 @@
+# Jackson JSON processor
+
+Jackson is a high-performance, Free/Open Source JSON processing library.
+It was originally written by Tatu Saloranta (tatu.saloranta@iki.fi), and has
+been in development since 2007.
+It is currently developed by a community of developers, as well as supported
+commercially by FasterXML.com.
+
+## Licensing
+
+Jackson core and extension components may be licensed under different licenses.
+To find the details that apply to this artifact see the accompanying LICENSE file.
+For more information, including possible other licensing options, contact
+FasterXML.com (http://fasterxml.com).
+
+## Credits
+
+A list of contributors may be found from CREDITS file, which is included
+in some artifacts (usually source distributions); but is always available
+from the source code management (SCM) system project uses.
\ No newline at end of file
diff --git a/solr/licenses/jackson-dataformat-smile-2.12.3.jar.sha1 b/solr/licenses/jackson-dataformat-smile-2.12.3.jar.sha1
new file mode 100644
index 0000000..0610c41
--- /dev/null
+++ b/solr/licenses/jackson-dataformat-smile-2.12.3.jar.sha1
@@ -0,0 +1 @@
+f9be9f3ee1a04aafc501f1cf6850b18852f2178a
diff --git a/solr/licenses/jackson-dataformat-xml-2.12.3.jar.sha1 b/solr/licenses/jackson-dataformat-xml-2.12.3.jar.sha1
new file mode 100644
index 0000000..2bd78bd
--- /dev/null
+++ b/solr/licenses/jackson-dataformat-xml-2.12.3.jar.sha1
@@ -0,0 +1 @@
+d2a90460fecffa0c7ae9fd836272bbce91b5241a
diff --git a/solr/licenses/jackson-dataformat-xml-LICENSE-ASL.txt b/solr/licenses/jackson-dataformat-xml-LICENSE-ASL.txt
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/solr/licenses/jackson-dataformat-xml-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
diff --git a/solr/licenses/jackson-dataformat-xml-NOTICE.txt b/solr/licenses/jackson-dataformat-xml-NOTICE.txt
new file mode 100644
index 0000000..e69de29
diff --git a/solr/licenses/jackson-datatype-jdk8-2.12.3.jar.sha1 b/solr/licenses/jackson-datatype-jdk8-2.12.3.jar.sha1
new file mode 100644
index 0000000..51220d4
--- /dev/null
+++ b/solr/licenses/jackson-datatype-jdk8-2.12.3.jar.sha1
@@ -0,0 +1 @@
+77424ea087313312e308dae5ff8445608aabb5e1
diff --git a/solr/licenses/jackson-datatype-jdk8-LICENSE-ASL.txt b/solr/licenses/jackson-datatype-jdk8-LICENSE-ASL.txt
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/solr/licenses/jackson-datatype-jdk8-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
diff --git a/solr/licenses/jackson-datatype-jdk8-NOTICE.txt b/solr/licenses/jackson-datatype-jdk8-NOTICE.txt
new file mode 100644
index 0000000..e69de29
diff --git a/solr/licenses/jackson-datatype-jsr310-2.12.3.jar.sha1 b/solr/licenses/jackson-datatype-jsr310-2.12.3.jar.sha1
new file mode 100644
index 0000000..899e236
--- /dev/null
+++ b/solr/licenses/jackson-datatype-jsr310-2.12.3.jar.sha1
@@ -0,0 +1 @@
+f69c636438dcf19c49960c1fe8901320ab85f989
diff --git a/solr/licenses/jackson-datatype-jsr310-LICENSE-ASL.txt b/solr/licenses/jackson-datatype-jsr310-LICENSE-ASL.txt
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/solr/licenses/jackson-datatype-jsr310-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
diff --git a/solr/licenses/jackson-datatype-jsr310-NOTICE.txt b/solr/licenses/jackson-datatype-jsr310-NOTICE.txt
new file mode 100644
index 0000000..e69de29
diff --git a/solr/licenses/jackson-module-jaxb-annotations-2.12.3.jar.sha1 b/solr/licenses/jackson-module-jaxb-annotations-2.12.3.jar.sha1
new file mode 100644
index 0000000..e9823b1
--- /dev/null
+++ b/solr/licenses/jackson-module-jaxb-annotations-2.12.3.jar.sha1
@@ -0,0 +1 @@
+ea843951d2efdd5e6844d6faa8aabf71698463a8
diff --git a/solr/licenses/jackson-module-jaxb-annotations-LICENSE-ASL.txt b/solr/licenses/jackson-module-jaxb-annotations-LICENSE-ASL.txt
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/solr/licenses/jackson-module-jaxb-annotations-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
diff --git a/solr/licenses/jackson-module-jaxb-annotations-NOTICE.txt b/solr/licenses/jackson-module-jaxb-annotations-NOTICE.txt
new file mode 100644
index 0000000..e69de29
diff --git a/solr/licenses/jackson-module-kotlin-2.12.3.jar.sha1 b/solr/licenses/jackson-module-kotlin-2.12.3.jar.sha1
new file mode 100644
index 0000000..93fa80d
--- /dev/null
+++ b/solr/licenses/jackson-module-kotlin-2.12.3.jar.sha1
@@ -0,0 +1 @@
+c8da7d998ed2e9253e62fdf15d1112c54b3ce6db
diff --git a/solr/licenses/jackson-module-parameter-names-2.12.3.jar.sha1 b/solr/licenses/jackson-module-parameter-names-2.12.3.jar.sha1
new file mode 100644
index 0000000..da9bbb0
--- /dev/null
+++ b/solr/licenses/jackson-module-parameter-names-2.12.3.jar.sha1
@@ -0,0 +1 @@
+592a882beaf1bd57b8fe960b937a2706b090b4d7
diff --git a/solr/licenses/jackson-module-parameter-names-LICENSE-ASL.txt b/solr/licenses/jackson-module-parameter-names-LICENSE-ASL.txt
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/solr/licenses/jackson-module-parameter-names-LICENSE-ASL.txt
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
diff --git a/solr/licenses/jackson-module-parameter-names-NOTICE.txt b/solr/licenses/jackson-module-parameter-names-NOTICE.txt
new file mode 100644
index 0000000..e69de29
diff --git a/solr/licenses/jakarta.activation-api-1.2.1.jar.sha1 b/solr/licenses/jakarta.activation-api-1.2.1.jar.sha1
new file mode 100644
index 0000000..7e7decf
--- /dev/null
+++ b/solr/licenses/jakarta.activation-api-1.2.1.jar.sha1
@@ -0,0 +1 @@
+562a587face36ec7eff2db7f2fc95425c6602bc1
diff --git a/solr/licenses/jakarta.activation-api-LICENSE-BSD_LIKE.txt b/solr/licenses/jakarta.activation-api-LICENSE-BSD_LIKE.txt
new file mode 100644
index 0000000..e0cdfb1
--- /dev/null
+++ b/solr/licenses/jakarta.activation-api-LICENSE-BSD_LIKE.txt
@@ -0,0 +1,13 @@
+Eclipse Distribution License - v 1.0
+
+Copyright (c) 2007, Eclipse Foundation, Inc. and its licensors.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+- Neither the name of the Eclipse Foundation, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFI [...]
\ No newline at end of file
diff --git a/solr/licenses/jakarta.activation-api-NOTICE.txt b/solr/licenses/jakarta.activation-api-NOTICE.txt
new file mode 100644
index 0000000..78e216f
--- /dev/null
+++ b/solr/licenses/jakarta.activation-api-NOTICE.txt
@@ -0,0 +1,25 @@
+# Notices for Jakarta Activation
+
+This content is produced and maintained by Jakarta Activation project.
+
+* Project home: https://projects.eclipse.org/projects/ee4j.jaf
+
+## Copyright
+
+All content is the property of the respective authors or their employers. For
+more information regarding authorship of content, please consult the listed
+source code repository logs.
+
+## Declared Project Licenses
+
+This program and the accompanying materials are made available under the terms
+of the Eclipse Distribution License v. 1.0,
+which is available at http://www.eclipse.org/org/documents/edl-v10.php.
+
+SPDX-License-Identifier: BSD-3-Clause
+
+## Source Code
+
+The project maintains the following source code repositories:
+
+* https://github.com/eclipse-ee4j/jaf
diff --git a/solr/licenses/jakarta.annotation-api-1.3.5.jar.sha1 b/solr/licenses/jakarta.annotation-api-1.3.5.jar.sha1
new file mode 100644
index 0000000..d3dd4d5
--- /dev/null
+++ b/solr/licenses/jakarta.annotation-api-1.3.5.jar.sha1
@@ -0,0 +1 @@
+59eb84ee0d616332ff44aba065f3888cf002cd2d
diff --git a/solr/licenses/jakarta.annotation-api-LICENSE-EPL.txt b/solr/licenses/jakarta.annotation-api-LICENSE-EPL.txt
new file mode 100644
index 0000000..bda7db0
--- /dev/null
+++ b/solr/licenses/jakarta.annotation-api-LICENSE-EPL.txt
@@ -0,0 +1,277 @@
+# Eclipse Public License - v 2.0
+
+        THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+        PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
+        OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+    1. DEFINITIONS
+
+    "Contribution" means:
+
+      a) in the case of the initial Contributor, the initial content
+         Distributed under this Agreement, and
+
+      b) in the case of each subsequent Contributor:
+         i) changes to the Program, and
+         ii) additions to the Program;
+      where such changes and/or additions to the Program originate from
+      and are Distributed by that particular Contributor. A Contribution
+      "originates" from a Contributor if it was added to the Program by
+      such Contributor itself or anyone acting on such Contributor's behalf.
+      Contributions do not include changes or additions to the Program that
+      are not Modified Works.
+
+    "Contributor" means any person or entity that Distributes the Program.
+
+    "Licensed Patents" mean patent claims licensable by a Contributor which
+    are necessarily infringed by the use or sale of its Contribution alone
+    or when combined with the Program.
+
+    "Program" means the Contributions Distributed in accordance with this
+    Agreement.
+
+    "Recipient" means anyone who receives the Program under this Agreement
+    or any Secondary License (as applicable), including Contributors.
+
+    "Derivative Works" shall mean any work, whether in Source Code or other
+    form, that is based on (or derived from) the Program and for which the
+    editorial revisions, annotations, elaborations, or other modifications
+    represent, as a whole, an original work of authorship.
+
+    "Modified Works" shall mean any work in Source Code or other form that
+    results from an addition to, deletion from, or modification of the
+    contents of the Program, including, for purposes of clarity any new file
+    in Source Code form that contains any contents of the Program. Modified
+    Works shall not include works that contain only declarations,
+    interfaces, types, classes, structures, or files of the Program solely
+    in each case in order to link to, bind by name, or subclass the Program
+    or Modified Works thereof.
+
+    "Distribute" means the acts of a) distributing or b) making available
+    in any manner that enables the transfer of a copy.
+
+    "Source Code" means the form of a Program preferred for making
+    modifications, including but not limited to software source code,
+    documentation source, and configuration files.
+
+    "Secondary License" means either the GNU General Public License,
+    Version 2.0, or any later versions of that license, including any
+    exceptions or additional permissions as identified by the initial
+    Contributor.
+
+    2. GRANT OF RIGHTS
+
+      a) Subject to the terms of this Agreement, each Contributor hereby
+      grants Recipient a non-exclusive, worldwide, royalty-free copyright
+      license to reproduce, prepare Derivative Works of, publicly display,
+      publicly perform, Distribute and sublicense the Contribution of such
+      Contributor, if any, and such Derivative Works.
+
+      b) Subject to the terms of this Agreement, each Contributor hereby
+      grants Recipient a non-exclusive, worldwide, royalty-free patent
+      license under Licensed Patents to make, use, sell, offer to sell,
+      import and otherwise transfer the Contribution of such Contributor,
+      if any, in Source Code or other form. This patent license shall
+      apply to the combination of the Contribution and the Program if, at
+      the time the Contribution is added by the Contributor, such addition
+      of the Contribution causes such combination to be covered by the
+      Licensed Patents. The patent license shall not apply to any other
+      combinations which include the Contribution. No hardware per se is
+      licensed hereunder.
+
+      c) Recipient understands that although each Contributor grants the
+      licenses to its Contributions set forth herein, no assurances are
+      provided by any Contributor that the Program does not infringe the
+      patent or other intellectual property rights of any other entity.
+      Each Contributor disclaims any liability to Recipient for claims
+      brought by any other entity based on infringement of intellectual
+      property rights or otherwise. As a condition to exercising the
+      rights and licenses granted hereunder, each Recipient hereby
+      assumes sole responsibility to secure any other intellectual
+      property rights needed, if any. For example, if a third party
+      patent license is required to allow Recipient to Distribute the
+      Program, it is Recipient's responsibility to acquire that license
+      before distributing the Program.
+
+      d) Each Contributor represents that to its knowledge it has
+      sufficient copyright rights in its Contribution, if any, to grant
+      the copyright license set forth in this Agreement.
+
+      e) Notwithstanding the terms of any Secondary License, no
+      Contributor makes additional grants to any Recipient (other than
+      those set forth in this Agreement) as a result of such Recipient's
+      receipt of the Program under the terms of a Secondary License
+      (if permitted under the terms of Section 3).
+
+    3. REQUIREMENTS
+
+    3.1 If a Contributor Distributes the Program in any form, then:
+
+      a) the Program must also be made available as Source Code, in
+      accordance with section 3.2, and the Contributor must accompany
+      the Program with a statement that the Source Code for the Program
+      is available under this Agreement, and informs Recipients how to
+      obtain it in a reasonable manner on or through a medium customarily
+      used for software exchange; and
+
+      b) the Contributor may Distribute the Program under a license
+      different than this Agreement, provided that such license:
+         i) effectively disclaims on behalf of all other Contributors all
+         warranties and conditions, express and implied, including
+         warranties or conditions of title and non-infringement, and
+         implied warranties or conditions of merchantability and fitness
+         for a particular purpose;
+
+         ii) effectively excludes on behalf of all other Contributors all
+         liability for damages, including direct, indirect, special,
+         incidental and consequential damages, such as lost profits;
+
+         iii) does not attempt to limit or alter the recipients' rights
+         in the Source Code under section 3.2; and
+
+         iv) requires any subsequent distribution of the Program by any
+         party to be under a license that satisfies the requirements
+         of this section 3.
+
+    3.2 When the Program is Distributed as Source Code:
+
+      a) it must be made available under this Agreement, or if the
+      Program (i) is combined with other material in a separate file or
+      files made available under a Secondary License, and (ii) the initial
+      Contributor attached to the Source Code the notice described in
+      Exhibit A of this Agreement, then the Program may be made available
+      under the terms of such Secondary Licenses, and
+
+      b) a copy of this Agreement must be included with each copy of
+      the Program.
+
+    3.3 Contributors may not remove or alter any copyright, patent,
+    trademark, attribution notices, disclaimers of warranty, or limitations
+    of liability ("notices") contained within the Program from any copy of
+    the Program which they Distribute, provided that Contributors may add
+    their own appropriate notices.
+
+    4. COMMERCIAL DISTRIBUTION
+
+    Commercial distributors of software may accept certain responsibilities
+    with respect to end users, business partners and the like. While this
+    license is intended to facilitate the commercial use of the Program,
+    the Contributor who includes the Program in a commercial product
+    offering should do so in a manner which does not create potential
+    liability for other Contributors. Therefore, if a Contributor includes
+    the Program in a commercial product offering, such Contributor
+    ("Commercial Contributor") hereby agrees to defend and indemnify every
+    other Contributor ("Indemnified Contributor") against any losses,
+    damages and costs (collectively "Losses") arising from claims, lawsuits
+    and other legal actions brought by a third party against the Indemnified
+    Contributor to the extent caused by the acts or omissions of such
+    Commercial Contributor in connection with its distribution of the Program
+    in a commercial product offering. The obligations in this section do not
+    apply to any claims or Losses relating to any actual or alleged
+    intellectual property infringement. In order to qualify, an Indemnified
+    Contributor must: a) promptly notify the Commercial Contributor in
+    writing of such claim, and b) allow the Commercial Contributor to control,
+    and cooperate with the Commercial Contributor in, the defense and any
+    related settlement negotiations. The Indemnified Contributor may
+    participate in any such claim at its own expense.
+
+    For example, a Contributor might include the Program in a commercial
+    product offering, Product X. That Contributor is then a Commercial
+    Contributor. If that Commercial Contributor then makes performance
+    claims, or offers warranties related to Product X, those performance
+    claims and warranties are such Commercial Contributor's responsibility
+    alone. Under this section, the Commercial Contributor would have to
+    defend claims against the other Contributors related to those performance
+    claims and warranties, and if a court requires any other Contributor to
+    pay any damages as a result, the Commercial Contributor must pay
+    those damages.
+
+    5. NO WARRANTY
+
+    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+    PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
+    BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+    IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
+    TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
+    PURPOSE. Each Recipient is solely responsible for determining the
+    appropriateness of using and distributing the Program and assumes all
+    risks associated with its exercise of rights under this Agreement,
+    including but not limited to the risks and costs of program errors,
+    compliance with applicable laws, damage to or loss of data, programs
+    or equipment, and unavailability or interruption of operations.
+
+    6. DISCLAIMER OF LIABILITY
+
+    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+    PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
+    SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+    PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+    EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGES.
+
+    7. GENERAL
+
+    If any provision of this Agreement is invalid or unenforceable under
+    applicable law, it shall not affect the validity or enforceability of
+    the remainder of the terms of this Agreement, and without further
+    action by the parties hereto, such provision shall be reformed to the
+    minimum extent necessary to make such provision valid and enforceable.
+
+    If Recipient institutes patent litigation against any entity
+    (including a cross-claim or counterclaim in a lawsuit) alleging that the
+    Program itself (excluding combinations of the Program with other software
+    or hardware) infringes such Recipient's patent(s), then such Recipient's
+    rights granted under Section 2(b) shall terminate as of the date such
+    litigation is filed.
+
+    All Recipient's rights under this Agreement shall terminate if it
+    fails to comply with any of the material terms or conditions of this
+    Agreement and does not cure such failure in a reasonable period of
+    time after becoming aware of such noncompliance. If all Recipient's
+    rights under this Agreement terminate, Recipient agrees to cease use
+    and distribution of the Program as soon as reasonably practicable.
+    However, Recipient's obligations under this Agreement and any licenses
+    granted by Recipient relating to the Program shall continue and survive.
+
+    Everyone is permitted to copy and distribute copies of this Agreement,
+    but in order to avoid inconsistency the Agreement is copyrighted and
+    may only be modified in the following manner. The Agreement Steward
+    reserves the right to publish new versions (including revisions) of
+    this Agreement from time to time. No one other than the Agreement
+    Steward has the right to modify this Agreement. The Eclipse Foundation
+    is the initial Agreement Steward. The Eclipse Foundation may assign the
+    responsibility to serve as the Agreement Steward to a suitable separate
+    entity. Each new version of the Agreement will be given a distinguishing
+    version number. The Program (including Contributions) may always be
+    Distributed subject to the version of the Agreement under which it was
+    received. In addition, after a new version of the Agreement is published,
+    Contributor may elect to Distribute the Program (including its
+    Contributions) under the new version.
+
+    Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+    receives no rights or licenses to the intellectual property of any
+    Contributor under this Agreement, whether expressly, by implication,
+    estoppel or otherwise. All rights in the Program not expressly granted
+    under this Agreement are reserved. Nothing in this Agreement is intended
+    to be enforceable by any entity that is not a Contributor or Recipient.
+    No third-party beneficiary rights are created under this Agreement.
+
+    Exhibit A - Form of Secondary Licenses Notice
+
+    "This Source Code may also be made available under the following
+    Secondary Licenses when the conditions for such availability set forth
+    in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+    version(s), and exceptions or additional permissions here}."
+
+      Simply including a copy of this Agreement, including this Exhibit A
+      is not sufficient to license the Source Code under Secondary Licenses.
+
+      If it is not possible or desirable to put the notice in a particular
+      file, then You may include the notice in a location (such as a LICENSE
+      file in a relevant directory) where a recipient would be likely to
+      look for such a notice.
+
+      You may add additional accurate notices of copyright ownership.
diff --git a/solr/licenses/jakarta.annotation-api-NOTICE.txt b/solr/licenses/jakarta.annotation-api-NOTICE.txt
new file mode 100644
index 0000000..6e7560a
--- /dev/null
+++ b/solr/licenses/jakarta.annotation-api-NOTICE.txt
@@ -0,0 +1,38 @@
+# Notices for Jakarta Annotations
+
+This content is produced and maintained by the Jakarta Annotations project.
+
+ * Project home: https://projects.eclipse.org/projects/ee4j.ca
+
+## Trademarks
+
+Jakarta Annotations is a trademark of the Eclipse Foundation.
+
+## Declared Project Licenses
+
+This program and the accompanying materials are made available under the terms
+of the Eclipse Public License v. 2.0 which is available at
+http://www.eclipse.org/legal/epl-2.0. This Source Code may also be made
+available under the following Secondary Licenses when the conditions for such
+availability set forth in the Eclipse Public License v. 2.0 are satisfied: GNU
+General Public License, version 2 with the GNU Classpath Exception which is
+available at https://www.gnu.org/software/classpath/license.html.
+
+SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+
+## Source Code
+
+The project maintains the following source code repositories:
+
+ * https://github.com/eclipse-ee4j/common-annotations-api
+
+## Third-party Content
+
+## Cryptography
+
+Content may contain encryption software. The country in which you are currently
+may have restrictions on the import, possession, and use, and/or re-export to
+another country, of encryption software. BEFORE using any encryption software,
+please check the country's laws, regulations and policies concerning the import,
+possession, or use, and re-export of encryption software, to see if this is
+permitted.
diff --git a/solr/licenses/jakarta.el-3.0.3.jar.sha1 b/solr/licenses/jakarta.el-3.0.3.jar.sha1
new file mode 100644
index 0000000..cf7eb17
--- /dev/null
+++ b/solr/licenses/jakarta.el-3.0.3.jar.sha1
@@ -0,0 +1 @@
+dab46ee1ee23f7197c13d7c40fce14817c9017df
diff --git a/solr/licenses/jakarta.el-LICENSE-EPL.txt b/solr/licenses/jakarta.el-LICENSE-EPL.txt
new file mode 100644
index 0000000..bda7db0
--- /dev/null
+++ b/solr/licenses/jakarta.el-LICENSE-EPL.txt
@@ -0,0 +1,277 @@
+# Eclipse Public License - v 2.0
+
+        THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+        PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
+        OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+    1. DEFINITIONS
+
+    "Contribution" means:
+
+      a) in the case of the initial Contributor, the initial content
+         Distributed under this Agreement, and
+
+      b) in the case of each subsequent Contributor:
+         i) changes to the Program, and
+         ii) additions to the Program;
+      where such changes and/or additions to the Program originate from
+      and are Distributed by that particular Contributor. A Contribution
+      "originates" from a Contributor if it was added to the Program by
+      such Contributor itself or anyone acting on such Contributor's behalf.
+      Contributions do not include changes or additions to the Program that
+      are not Modified Works.
+
+    "Contributor" means any person or entity that Distributes the Program.
+
+    "Licensed Patents" mean patent claims licensable by a Contributor which
+    are necessarily infringed by the use or sale of its Contribution alone
+    or when combined with the Program.
+
+    "Program" means the Contributions Distributed in accordance with this
+    Agreement.
+
+    "Recipient" means anyone who receives the Program under this Agreement
+    or any Secondary License (as applicable), including Contributors.
+
+    "Derivative Works" shall mean any work, whether in Source Code or other
+    form, that is based on (or derived from) the Program and for which the
+    editorial revisions, annotations, elaborations, or other modifications
+    represent, as a whole, an original work of authorship.
+
+    "Modified Works" shall mean any work in Source Code or other form that
+    results from an addition to, deletion from, or modification of the
+    contents of the Program, including, for purposes of clarity any new file
+    in Source Code form that contains any contents of the Program. Modified
+    Works shall not include works that contain only declarations,
+    interfaces, types, classes, structures, or files of the Program solely
+    in each case in order to link to, bind by name, or subclass the Program
+    or Modified Works thereof.
+
+    "Distribute" means the acts of a) distributing or b) making available
+    in any manner that enables the transfer of a copy.
+
+    "Source Code" means the form of a Program preferred for making
+    modifications, including but not limited to software source code,
+    documentation source, and configuration files.
+
+    "Secondary License" means either the GNU General Public License,
+    Version 2.0, or any later versions of that license, including any
+    exceptions or additional permissions as identified by the initial
+    Contributor.
+
+    2. GRANT OF RIGHTS
+
+      a) Subject to the terms of this Agreement, each Contributor hereby
+      grants Recipient a non-exclusive, worldwide, royalty-free copyright
+      license to reproduce, prepare Derivative Works of, publicly display,
+      publicly perform, Distribute and sublicense the Contribution of such
+      Contributor, if any, and such Derivative Works.
+
+      b) Subject to the terms of this Agreement, each Contributor hereby
+      grants Recipient a non-exclusive, worldwide, royalty-free patent
+      license under Licensed Patents to make, use, sell, offer to sell,
+      import and otherwise transfer the Contribution of such Contributor,
+      if any, in Source Code or other form. This patent license shall
+      apply to the combination of the Contribution and the Program if, at
+      the time the Contribution is added by the Contributor, such addition
+      of the Contribution causes such combination to be covered by the
+      Licensed Patents. The patent license shall not apply to any other
+      combinations which include the Contribution. No hardware per se is
+      licensed hereunder.
+
+      c) Recipient understands that although each Contributor grants the
+      licenses to its Contributions set forth herein, no assurances are
+      provided by any Contributor that the Program does not infringe the
+      patent or other intellectual property rights of any other entity.
+      Each Contributor disclaims any liability to Recipient for claims
+      brought by any other entity based on infringement of intellectual
+      property rights or otherwise. As a condition to exercising the
+      rights and licenses granted hereunder, each Recipient hereby
+      assumes sole responsibility to secure any other intellectual
+      property rights needed, if any. For example, if a third party
+      patent license is required to allow Recipient to Distribute the
+      Program, it is Recipient's responsibility to acquire that license
+      before distributing the Program.
+
+      d) Each Contributor represents that to its knowledge it has
+      sufficient copyright rights in its Contribution, if any, to grant
+      the copyright license set forth in this Agreement.
+
+      e) Notwithstanding the terms of any Secondary License, no
+      Contributor makes additional grants to any Recipient (other than
+      those set forth in this Agreement) as a result of such Recipient's
+      receipt of the Program under the terms of a Secondary License
+      (if permitted under the terms of Section 3).
+
+    3. REQUIREMENTS
+
+    3.1 If a Contributor Distributes the Program in any form, then:
+
+      a) the Program must also be made available as Source Code, in
+      accordance with section 3.2, and the Contributor must accompany
+      the Program with a statement that the Source Code for the Program
+      is available under this Agreement, and informs Recipients how to
+      obtain it in a reasonable manner on or through a medium customarily
+      used for software exchange; and
+
+      b) the Contributor may Distribute the Program under a license
+      different than this Agreement, provided that such license:
+         i) effectively disclaims on behalf of all other Contributors all
+         warranties and conditions, express and implied, including
+         warranties or conditions of title and non-infringement, and
+         implied warranties or conditions of merchantability and fitness
+         for a particular purpose;
+
+         ii) effectively excludes on behalf of all other Contributors all
+         liability for damages, including direct, indirect, special,
+         incidental and consequential damages, such as lost profits;
+
+         iii) does not attempt to limit or alter the recipients' rights
+         in the Source Code under section 3.2; and
+
+         iv) requires any subsequent distribution of the Program by any
+         party to be under a license that satisfies the requirements
+         of this section 3.
+
+    3.2 When the Program is Distributed as Source Code:
+
+      a) it must be made available under this Agreement, or if the
+      Program (i) is combined with other material in a separate file or
+      files made available under a Secondary License, and (ii) the initial
+      Contributor attached to the Source Code the notice described in
+      Exhibit A of this Agreement, then the Program may be made available
+      under the terms of such Secondary Licenses, and
+
+      b) a copy of this Agreement must be included with each copy of
+      the Program.
+
+    3.3 Contributors may not remove or alter any copyright, patent,
+    trademark, attribution notices, disclaimers of warranty, or limitations
+    of liability ("notices") contained within the Program from any copy of
+    the Program which they Distribute, provided that Contributors may add
+    their own appropriate notices.
+
+    4. COMMERCIAL DISTRIBUTION
+
+    Commercial distributors of software may accept certain responsibilities
+    with respect to end users, business partners and the like. While this
+    license is intended to facilitate the commercial use of the Program,
+    the Contributor who includes the Program in a commercial product
+    offering should do so in a manner which does not create potential
+    liability for other Contributors. Therefore, if a Contributor includes
+    the Program in a commercial product offering, such Contributor
+    ("Commercial Contributor") hereby agrees to defend and indemnify every
+    other Contributor ("Indemnified Contributor") against any losses,
+    damages and costs (collectively "Losses") arising from claims, lawsuits
+    and other legal actions brought by a third party against the Indemnified
+    Contributor to the extent caused by the acts or omissions of such
+    Commercial Contributor in connection with its distribution of the Program
+    in a commercial product offering. The obligations in this section do not
+    apply to any claims or Losses relating to any actual or alleged
+    intellectual property infringement. In order to qualify, an Indemnified
+    Contributor must: a) promptly notify the Commercial Contributor in
+    writing of such claim, and b) allow the Commercial Contributor to control,
+    and cooperate with the Commercial Contributor in, the defense and any
+    related settlement negotiations. The Indemnified Contributor may
+    participate in any such claim at its own expense.
+
+    For example, a Contributor might include the Program in a commercial
+    product offering, Product X. That Contributor is then a Commercial
+    Contributor. If that Commercial Contributor then makes performance
+    claims, or offers warranties related to Product X, those performance
+    claims and warranties are such Commercial Contributor's responsibility
+    alone. Under this section, the Commercial Contributor would have to
+    defend claims against the other Contributors related to those performance
+    claims and warranties, and if a court requires any other Contributor to
+    pay any damages as a result, the Commercial Contributor must pay
+    those damages.
+
+    5. NO WARRANTY
+
+    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+    PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
+    BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+    IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
+    TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
+    PURPOSE. Each Recipient is solely responsible for determining the
+    appropriateness of using and distributing the Program and assumes all
+    risks associated with its exercise of rights under this Agreement,
+    including but not limited to the risks and costs of program errors,
+    compliance with applicable laws, damage to or loss of data, programs
+    or equipment, and unavailability or interruption of operations.
+
+    6. DISCLAIMER OF LIABILITY
+
+    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+    PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
+    SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+    PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+    EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGES.
+
+    7. GENERAL
+
+    If any provision of this Agreement is invalid or unenforceable under
+    applicable law, it shall not affect the validity or enforceability of
+    the remainder of the terms of this Agreement, and without further
+    action by the parties hereto, such provision shall be reformed to the
+    minimum extent necessary to make such provision valid and enforceable.
+
+    If Recipient institutes patent litigation against any entity
+    (including a cross-claim or counterclaim in a lawsuit) alleging that the
+    Program itself (excluding combinations of the Program with other software
+    or hardware) infringes such Recipient's patent(s), then such Recipient's
+    rights granted under Section 2(b) shall terminate as of the date such
+    litigation is filed.
+
+    All Recipient's rights under this Agreement shall terminate if it
+    fails to comply with any of the material terms or conditions of this
+    Agreement and does not cure such failure in a reasonable period of
+    time after becoming aware of such noncompliance. If all Recipient's
+    rights under this Agreement terminate, Recipient agrees to cease use
+    and distribution of the Program as soon as reasonably practicable.
+    However, Recipient's obligations under this Agreement and any licenses
+    granted by Recipient relating to the Program shall continue and survive.
+
+    Everyone is permitted to copy and distribute copies of this Agreement,
+    but in order to avoid inconsistency the Agreement is copyrighted and
+    may only be modified in the following manner. The Agreement Steward
+    reserves the right to publish new versions (including revisions) of
+    this Agreement from time to time. No one other than the Agreement
+    Steward has the right to modify this Agreement. The Eclipse Foundation
+    is the initial Agreement Steward. The Eclipse Foundation may assign the
+    responsibility to serve as the Agreement Steward to a suitable separate
+    entity. Each new version of the Agreement will be given a distinguishing
+    version number. The Program (including Contributions) may always be
+    Distributed subject to the version of the Agreement under which it was
+    received. In addition, after a new version of the Agreement is published,
+    Contributor may elect to Distribute the Program (including its
+    Contributions) under the new version.
+
+    Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+    receives no rights or licenses to the intellectual property of any
+    Contributor under this Agreement, whether expressly, by implication,
+    estoppel or otherwise. All rights in the Program not expressly granted
+    under this Agreement are reserved. Nothing in this Agreement is intended
+    to be enforceable by any entity that is not a Contributor or Recipient.
+    No third-party beneficiary rights are created under this Agreement.
+
+    Exhibit A - Form of Secondary Licenses Notice
+
+    "This Source Code may also be made available under the following
+    Secondary Licenses when the conditions for such availability set forth
+    in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+    version(s), and exceptions or additional permissions here}."
+
+      Simply including a copy of this Agreement, including this Exhibit A
+      is not sufficient to license the Source Code under Secondary Licenses.
+
+      If it is not possible or desirable to put the notice in a particular
+      file, then You may include the notice in a location (such as a LICENSE
+      file in a relevant directory) where a recipient would be likely to
+      look for such a notice.
+
+      You may add additional accurate notices of copyright ownership.
diff --git a/solr/licenses/jakarta.el-NOTICE.txt b/solr/licenses/jakarta.el-NOTICE.txt
new file mode 100644
index 0000000..9e121fd
--- /dev/null
+++ b/solr/licenses/jakarta.el-NOTICE.txt
@@ -0,0 +1,45 @@
+# Notices for Jakarta Expression Language
+
+This content is produced and maintained by the Jakarta Expression Language project.
+
+* Project home: https://projects.eclipse.org/projects/ee4j.el
+
+## Trademarks
+
+Jakarta Expression Language is a trademark of the Eclipse
+Foundation.
+
+## Copyright
+
+All content is the property of the respective authors or their employers. For
+more information regarding authorship of content, please consult the listed
+source code repository logs.
+
+## Declared Project Licenses
+
+This program and the accompanying materials are made available under the terms
+of the Eclipse Public License v. 2.0 which is available at
+http://www.eclipse.org/legal/epl-2.0. This Source Code may also be made
+available under the following Secondary Licenses when the conditions for such
+availability set forth in the Eclipse Public License v. 2.0 are satisfied: GNU
+General Public License, version 2 with the GNU Classpath Exception which is
+available at https://www.gnu.org/software/classpath/license.html.
+
+SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+
+## Source Code
+
+The project maintains the following source code repositories:
+
+* https://github.com/eclipse-ee4j/el-ri
+
+## Third-party Content
+
+## Cryptography
+
+Content may contain encryption software. The country in which you are currently
+may have restrictions on the import, possession, and use, and/or re-export to
+another country, of encryption software. BEFORE using any encryption software,
+please check the country's laws, regulations and policies concerning the import,
+possession, or use, and re-export of encryption software, to see if this is
+permitted.
diff --git a/solr/licenses/jakarta.servlet-api-4.0.4.jar.sha1 b/solr/licenses/jakarta.servlet-api-4.0.4.jar.sha1
new file mode 100644
index 0000000..560414c
--- /dev/null
+++ b/solr/licenses/jakarta.servlet-api-4.0.4.jar.sha1
@@ -0,0 +1 @@
+b8a1142e04838fe54194049c6e7a18dae8f9b960
diff --git a/solr/licenses/jakarta.servlet-api-LICENSE-EPL.txt b/solr/licenses/jakarta.servlet-api-LICENSE-EPL.txt
new file mode 100644
index 0000000..bda7db0
--- /dev/null
+++ b/solr/licenses/jakarta.servlet-api-LICENSE-EPL.txt
@@ -0,0 +1,277 @@
+# Eclipse Public License - v 2.0
+
+        THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+        PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
+        OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+    1. DEFINITIONS
+
+    "Contribution" means:
+
+      a) in the case of the initial Contributor, the initial content
+         Distributed under this Agreement, and
+
+      b) in the case of each subsequent Contributor:
+         i) changes to the Program, and
+         ii) additions to the Program;
+      where such changes and/or additions to the Program originate from
+      and are Distributed by that particular Contributor. A Contribution
+      "originates" from a Contributor if it was added to the Program by
+      such Contributor itself or anyone acting on such Contributor's behalf.
+      Contributions do not include changes or additions to the Program that
+      are not Modified Works.
+
+    "Contributor" means any person or entity that Distributes the Program.
+
+    "Licensed Patents" mean patent claims licensable by a Contributor which
+    are necessarily infringed by the use or sale of its Contribution alone
+    or when combined with the Program.
+
+    "Program" means the Contributions Distributed in accordance with this
+    Agreement.
+
+    "Recipient" means anyone who receives the Program under this Agreement
+    or any Secondary License (as applicable), including Contributors.
+
+    "Derivative Works" shall mean any work, whether in Source Code or other
+    form, that is based on (or derived from) the Program and for which the
+    editorial revisions, annotations, elaborations, or other modifications
+    represent, as a whole, an original work of authorship.
+
+    "Modified Works" shall mean any work in Source Code or other form that
+    results from an addition to, deletion from, or modification of the
+    contents of the Program, including, for purposes of clarity any new file
+    in Source Code form that contains any contents of the Program. Modified
+    Works shall not include works that contain only declarations,
+    interfaces, types, classes, structures, or files of the Program solely
+    in each case in order to link to, bind by name, or subclass the Program
+    or Modified Works thereof.
+
+    "Distribute" means the acts of a) distributing or b) making available
+    in any manner that enables the transfer of a copy.
+
+    "Source Code" means the form of a Program preferred for making
+    modifications, including but not limited to software source code,
+    documentation source, and configuration files.
+
+    "Secondary License" means either the GNU General Public License,
+    Version 2.0, or any later versions of that license, including any
+    exceptions or additional permissions as identified by the initial
+    Contributor.
+
+    2. GRANT OF RIGHTS
+
+      a) Subject to the terms of this Agreement, each Contributor hereby
+      grants Recipient a non-exclusive, worldwide, royalty-free copyright
+      license to reproduce, prepare Derivative Works of, publicly display,
+      publicly perform, Distribute and sublicense the Contribution of such
+      Contributor, if any, and such Derivative Works.
+
+      b) Subject to the terms of this Agreement, each Contributor hereby
+      grants Recipient a non-exclusive, worldwide, royalty-free patent
+      license under Licensed Patents to make, use, sell, offer to sell,
+      import and otherwise transfer the Contribution of such Contributor,
+      if any, in Source Code or other form. This patent license shall
+      apply to the combination of the Contribution and the Program if, at
+      the time the Contribution is added by the Contributor, such addition
+      of the Contribution causes such combination to be covered by the
+      Licensed Patents. The patent license shall not apply to any other
+      combinations which include the Contribution. No hardware per se is
+      licensed hereunder.
+
+      c) Recipient understands that although each Contributor grants the
+      licenses to its Contributions set forth herein, no assurances are
+      provided by any Contributor that the Program does not infringe the
+      patent or other intellectual property rights of any other entity.
+      Each Contributor disclaims any liability to Recipient for claims
+      brought by any other entity based on infringement of intellectual
+      property rights or otherwise. As a condition to exercising the
+      rights and licenses granted hereunder, each Recipient hereby
+      assumes sole responsibility to secure any other intellectual
+      property rights needed, if any. For example, if a third party
+      patent license is required to allow Recipient to Distribute the
+      Program, it is Recipient's responsibility to acquire that license
+      before distributing the Program.
+
+      d) Each Contributor represents that to its knowledge it has
+      sufficient copyright rights in its Contribution, if any, to grant
+      the copyright license set forth in this Agreement.
+
+      e) Notwithstanding the terms of any Secondary License, no
+      Contributor makes additional grants to any Recipient (other than
+      those set forth in this Agreement) as a result of such Recipient's
+      receipt of the Program under the terms of a Secondary License
+      (if permitted under the terms of Section 3).
+
+    3. REQUIREMENTS
+
+    3.1 If a Contributor Distributes the Program in any form, then:
+
+      a) the Program must also be made available as Source Code, in
+      accordance with section 3.2, and the Contributor must accompany
+      the Program with a statement that the Source Code for the Program
+      is available under this Agreement, and informs Recipients how to
+      obtain it in a reasonable manner on or through a medium customarily
+      used for software exchange; and
+
+      b) the Contributor may Distribute the Program under a license
+      different than this Agreement, provided that such license:
+         i) effectively disclaims on behalf of all other Contributors all
+         warranties and conditions, express and implied, including
+         warranties or conditions of title and non-infringement, and
+         implied warranties or conditions of merchantability and fitness
+         for a particular purpose;
+
+         ii) effectively excludes on behalf of all other Contributors all
+         liability for damages, including direct, indirect, special,
+         incidental and consequential damages, such as lost profits;
+
+         iii) does not attempt to limit or alter the recipients' rights
+         in the Source Code under section 3.2; and
+
+         iv) requires any subsequent distribution of the Program by any
+         party to be under a license that satisfies the requirements
+         of this section 3.
+
+    3.2 When the Program is Distributed as Source Code:
+
+      a) it must be made available under this Agreement, or if the
+      Program (i) is combined with other material in a separate file or
+      files made available under a Secondary License, and (ii) the initial
+      Contributor attached to the Source Code the notice described in
+      Exhibit A of this Agreement, then the Program may be made available
+      under the terms of such Secondary Licenses, and
+
+      b) a copy of this Agreement must be included with each copy of
+      the Program.
+
+    3.3 Contributors may not remove or alter any copyright, patent,
+    trademark, attribution notices, disclaimers of warranty, or limitations
+    of liability ("notices") contained within the Program from any copy of
+    the Program which they Distribute, provided that Contributors may add
+    their own appropriate notices.
+
+    4. COMMERCIAL DISTRIBUTION
+
+    Commercial distributors of software may accept certain responsibilities
+    with respect to end users, business partners and the like. While this
+    license is intended to facilitate the commercial use of the Program,
+    the Contributor who includes the Program in a commercial product
+    offering should do so in a manner which does not create potential
+    liability for other Contributors. Therefore, if a Contributor includes
+    the Program in a commercial product offering, such Contributor
+    ("Commercial Contributor") hereby agrees to defend and indemnify every
+    other Contributor ("Indemnified Contributor") against any losses,
+    damages and costs (collectively "Losses") arising from claims, lawsuits
+    and other legal actions brought by a third party against the Indemnified
+    Contributor to the extent caused by the acts or omissions of such
+    Commercial Contributor in connection with its distribution of the Program
+    in a commercial product offering. The obligations in this section do not
+    apply to any claims or Losses relating to any actual or alleged
+    intellectual property infringement. In order to qualify, an Indemnified
+    Contributor must: a) promptly notify the Commercial Contributor in
+    writing of such claim, and b) allow the Commercial Contributor to control,
+    and cooperate with the Commercial Contributor in, the defense and any
+    related settlement negotiations. The Indemnified Contributor may
+    participate in any such claim at its own expense.
+
+    For example, a Contributor might include the Program in a commercial
+    product offering, Product X. That Contributor is then a Commercial
+    Contributor. If that Commercial Contributor then makes performance
+    claims, or offers warranties related to Product X, those performance
+    claims and warranties are such Commercial Contributor's responsibility
+    alone. Under this section, the Commercial Contributor would have to
+    defend claims against the other Contributors related to those performance
+    claims and warranties, and if a court requires any other Contributor to
+    pay any damages as a result, the Commercial Contributor must pay
+    those damages.
+
+    5. NO WARRANTY
+
+    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+    PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
+    BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+    IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
+    TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
+    PURPOSE. Each Recipient is solely responsible for determining the
+    appropriateness of using and distributing the Program and assumes all
+    risks associated with its exercise of rights under this Agreement,
+    including but not limited to the risks and costs of program errors,
+    compliance with applicable laws, damage to or loss of data, programs
+    or equipment, and unavailability or interruption of operations.
+
+    6. DISCLAIMER OF LIABILITY
+
+    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+    PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
+    SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+    PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+    EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGES.
+
+    7. GENERAL
+
+    If any provision of this Agreement is invalid or unenforceable under
+    applicable law, it shall not affect the validity or enforceability of
+    the remainder of the terms of this Agreement, and without further
+    action by the parties hereto, such provision shall be reformed to the
+    minimum extent necessary to make such provision valid and enforceable.
+
+    If Recipient institutes patent litigation against any entity
+    (including a cross-claim or counterclaim in a lawsuit) alleging that the
+    Program itself (excluding combinations of the Program with other software
+    or hardware) infringes such Recipient's patent(s), then such Recipient's
+    rights granted under Section 2(b) shall terminate as of the date such
+    litigation is filed.
+
+    All Recipient's rights under this Agreement shall terminate if it
+    fails to comply with any of the material terms or conditions of this
+    Agreement and does not cure such failure in a reasonable period of
+    time after becoming aware of such noncompliance. If all Recipient's
+    rights under this Agreement terminate, Recipient agrees to cease use
+    and distribution of the Program as soon as reasonably practicable.
+    However, Recipient's obligations under this Agreement and any licenses
+    granted by Recipient relating to the Program shall continue and survive.
+
+    Everyone is permitted to copy and distribute copies of this Agreement,
+    but in order to avoid inconsistency the Agreement is copyrighted and
+    may only be modified in the following manner. The Agreement Steward
+    reserves the right to publish new versions (including revisions) of
+    this Agreement from time to time. No one other than the Agreement
+    Steward has the right to modify this Agreement. The Eclipse Foundation
+    is the initial Agreement Steward. The Eclipse Foundation may assign the
+    responsibility to serve as the Agreement Steward to a suitable separate
+    entity. Each new version of the Agreement will be given a distinguishing
+    version number. The Program (including Contributions) may always be
+    Distributed subject to the version of the Agreement under which it was
+    received. In addition, after a new version of the Agreement is published,
+    Contributor may elect to Distribute the Program (including its
+    Contributions) under the new version.
+
+    Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+    receives no rights or licenses to the intellectual property of any
+    Contributor under this Agreement, whether expressly, by implication,
+    estoppel or otherwise. All rights in the Program not expressly granted
+    under this Agreement are reserved. Nothing in this Agreement is intended
+    to be enforceable by any entity that is not a Contributor or Recipient.
+    No third-party beneficiary rights are created under this Agreement.
+
+    Exhibit A - Form of Secondary Licenses Notice
+
+    "This Source Code may also be made available under the following
+    Secondary Licenses when the conditions for such availability set forth
+    in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+    version(s), and exceptions or additional permissions here}."
+
+      Simply including a copy of this Agreement, including this Exhibit A
+      is not sufficient to license the Source Code under Secondary Licenses.
+
+      If it is not possible or desirable to put the notice in a particular
+      file, then You may include the notice in a location (such as a LICENSE
+      file in a relevant directory) where a recipient would be likely to
+      look for such a notice.
+
+      You may add additional accurate notices of copyright ownership.
diff --git a/solr/licenses/jakarta.servlet-api-NOTICE.txt b/solr/licenses/jakarta.servlet-api-NOTICE.txt
new file mode 100644
index 0000000..3d9d642
--- /dev/null
+++ b/solr/licenses/jakarta.servlet-api-NOTICE.txt
@@ -0,0 +1,48 @@
+# Notices for Eclipse Project for Servlet
+
+This content is produced and maintained by the Eclipse Project for Servlet
+project.
+
+* Project home: https://projects.eclipse.org/projects/ee4j.servlet
+
+## Trademarks
+
+Eclipse Project for Servlet is a trademark of the Eclipse Foundation.
+
+## Copyright
+
+All content is the property of the respective authors or their employers. For
+more information regarding authorship of content, please consult the listed
+source code repository logs.
+
+## Declared Project Licenses
+
+This program and the accompanying materials are made available under the terms
+of the Eclipse Public License v. 2.0 which is available at
+http://www.eclipse.org/legal/epl-2.0. This Source Code may also be made
+available under the following Secondary Licenses when the conditions for such
+availability set forth in the Eclipse Public License v. 2.0 are satisfied: GNU
+General Public License, version 2 with the GNU Classpath Exception which is
+available at https://www.gnu.org/software/classpath/license.html. Portions of
+this program and the accompanying materials are made available under the terms
+of the Apache License, version 2.0 which is available at
+https://www.apache.org/licenses/LICENSE-2.0.
+
+SPDX-License-Identifier: (EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0) AND Apache-2.0
+
+## Source Code
+
+The project maintains the following source code repositories:
+
+* https://github.com/eclipse-ee4j/servlet-api
+
+## Third-party Content
+
+## Cryptography
+
+Content may contain encryption software. The country in which you are currently
+may have restrictions on the import, possession, and use, and/or re-export to
+another country, of encryption software. BEFORE using any encryption software,
+please check the country's laws, regulations and policies concerning the import,
+possession, or use, and re-export of encryption software, to see if this is
+permitted.
diff --git a/solr/licenses/jakarta.websocket-api-1.1.2.jar.sha1 b/solr/licenses/jakarta.websocket-api-1.1.2.jar.sha1
new file mode 100644
index 0000000..5fa444d
--- /dev/null
+++ b/solr/licenses/jakarta.websocket-api-1.1.2.jar.sha1
@@ -0,0 +1 @@
+69c2fdfb75081cc935bc9d6c5616d12b0b73815f
diff --git a/solr/licenses/jakarta.websocket-api-LICENSE-EPL.txt b/solr/licenses/jakarta.websocket-api-LICENSE-EPL.txt
new file mode 100644
index 0000000..bda7db0
--- /dev/null
+++ b/solr/licenses/jakarta.websocket-api-LICENSE-EPL.txt
@@ -0,0 +1,277 @@
+# Eclipse Public License - v 2.0
+
+        THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+        PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
+        OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+    1. DEFINITIONS
+
+    "Contribution" means:
+
+      a) in the case of the initial Contributor, the initial content
+         Distributed under this Agreement, and
+
+      b) in the case of each subsequent Contributor:
+         i) changes to the Program, and
+         ii) additions to the Program;
+      where such changes and/or additions to the Program originate from
+      and are Distributed by that particular Contributor. A Contribution
+      "originates" from a Contributor if it was added to the Program by
+      such Contributor itself or anyone acting on such Contributor's behalf.
+      Contributions do not include changes or additions to the Program that
+      are not Modified Works.
+
+    "Contributor" means any person or entity that Distributes the Program.
+
+    "Licensed Patents" mean patent claims licensable by a Contributor which
+    are necessarily infringed by the use or sale of its Contribution alone
+    or when combined with the Program.
+
+    "Program" means the Contributions Distributed in accordance with this
+    Agreement.
+
+    "Recipient" means anyone who receives the Program under this Agreement
+    or any Secondary License (as applicable), including Contributors.
+
+    "Derivative Works" shall mean any work, whether in Source Code or other
+    form, that is based on (or derived from) the Program and for which the
+    editorial revisions, annotations, elaborations, or other modifications
+    represent, as a whole, an original work of authorship.
+
+    "Modified Works" shall mean any work in Source Code or other form that
+    results from an addition to, deletion from, or modification of the
+    contents of the Program, including, for purposes of clarity any new file
+    in Source Code form that contains any contents of the Program. Modified
+    Works shall not include works that contain only declarations,
+    interfaces, types, classes, structures, or files of the Program solely
+    in each case in order to link to, bind by name, or subclass the Program
+    or Modified Works thereof.
+
+    "Distribute" means the acts of a) distributing or b) making available
+    in any manner that enables the transfer of a copy.
+
+    "Source Code" means the form of a Program preferred for making
+    modifications, including but not limited to software source code,
+    documentation source, and configuration files.
+
+    "Secondary License" means either the GNU General Public License,
+    Version 2.0, or any later versions of that license, including any
+    exceptions or additional permissions as identified by the initial
+    Contributor.
+
+    2. GRANT OF RIGHTS
+
+      a) Subject to the terms of this Agreement, each Contributor hereby
+      grants Recipient a non-exclusive, worldwide, royalty-free copyright
+      license to reproduce, prepare Derivative Works of, publicly display,
+      publicly perform, Distribute and sublicense the Contribution of such
+      Contributor, if any, and such Derivative Works.
+
+      b) Subject to the terms of this Agreement, each Contributor hereby
+      grants Recipient a non-exclusive, worldwide, royalty-free patent
+      license under Licensed Patents to make, use, sell, offer to sell,
+      import and otherwise transfer the Contribution of such Contributor,
+      if any, in Source Code or other form. This patent license shall
+      apply to the combination of the Contribution and the Program if, at
+      the time the Contribution is added by the Contributor, such addition
+      of the Contribution causes such combination to be covered by the
+      Licensed Patents. The patent license shall not apply to any other
+      combinations which include the Contribution. No hardware per se is
+      licensed hereunder.
+
+      c) Recipient understands that although each Contributor grants the
+      licenses to its Contributions set forth herein, no assurances are
+      provided by any Contributor that the Program does not infringe the
+      patent or other intellectual property rights of any other entity.
+      Each Contributor disclaims any liability to Recipient for claims
+      brought by any other entity based on infringement of intellectual
+      property rights or otherwise. As a condition to exercising the
+      rights and licenses granted hereunder, each Recipient hereby
+      assumes sole responsibility to secure any other intellectual
+      property rights needed, if any. For example, if a third party
+      patent license is required to allow Recipient to Distribute the
+      Program, it is Recipient's responsibility to acquire that license
+      before distributing the Program.
+
+      d) Each Contributor represents that to its knowledge it has
+      sufficient copyright rights in its Contribution, if any, to grant
+      the copyright license set forth in this Agreement.
+
+      e) Notwithstanding the terms of any Secondary License, no
+      Contributor makes additional grants to any Recipient (other than
+      those set forth in this Agreement) as a result of such Recipient's
+      receipt of the Program under the terms of a Secondary License
+      (if permitted under the terms of Section 3).
+
+    3. REQUIREMENTS
+
+    3.1 If a Contributor Distributes the Program in any form, then:
+
+      a) the Program must also be made available as Source Code, in
+      accordance with section 3.2, and the Contributor must accompany
+      the Program with a statement that the Source Code for the Program
+      is available under this Agreement, and informs Recipients how to
+      obtain it in a reasonable manner on or through a medium customarily
+      used for software exchange; and
+
+      b) the Contributor may Distribute the Program under a license
+      different than this Agreement, provided that such license:
+         i) effectively disclaims on behalf of all other Contributors all
+         warranties and conditions, express and implied, including
+         warranties or conditions of title and non-infringement, and
+         implied warranties or conditions of merchantability and fitness
+         for a particular purpose;
+
+         ii) effectively excludes on behalf of all other Contributors all
+         liability for damages, including direct, indirect, special,
+         incidental and consequential damages, such as lost profits;
+
+         iii) does not attempt to limit or alter the recipients' rights
+         in the Source Code under section 3.2; and
+
+         iv) requires any subsequent distribution of the Program by any
+         party to be under a license that satisfies the requirements
+         of this section 3.
+
+    3.2 When the Program is Distributed as Source Code:
+
+      a) it must be made available under this Agreement, or if the
+      Program (i) is combined with other material in a separate file or
+      files made available under a Secondary License, and (ii) the initial
+      Contributor attached to the Source Code the notice described in
+      Exhibit A of this Agreement, then the Program may be made available
+      under the terms of such Secondary Licenses, and
+
+      b) a copy of this Agreement must be included with each copy of
+      the Program.
+
+    3.3 Contributors may not remove or alter any copyright, patent,
+    trademark, attribution notices, disclaimers of warranty, or limitations
+    of liability ("notices") contained within the Program from any copy of
+    the Program which they Distribute, provided that Contributors may add
+    their own appropriate notices.
+
+    4. COMMERCIAL DISTRIBUTION
+
+    Commercial distributors of software may accept certain responsibilities
+    with respect to end users, business partners and the like. While this
+    license is intended to facilitate the commercial use of the Program,
+    the Contributor who includes the Program in a commercial product
+    offering should do so in a manner which does not create potential
+    liability for other Contributors. Therefore, if a Contributor includes
+    the Program in a commercial product offering, such Contributor
+    ("Commercial Contributor") hereby agrees to defend and indemnify every
+    other Contributor ("Indemnified Contributor") against any losses,
+    damages and costs (collectively "Losses") arising from claims, lawsuits
+    and other legal actions brought by a third party against the Indemnified
+    Contributor to the extent caused by the acts or omissions of such
+    Commercial Contributor in connection with its distribution of the Program
+    in a commercial product offering. The obligations in this section do not
+    apply to any claims or Losses relating to any actual or alleged
+    intellectual property infringement. In order to qualify, an Indemnified
+    Contributor must: a) promptly notify the Commercial Contributor in
+    writing of such claim, and b) allow the Commercial Contributor to control,
+    and cooperate with the Commercial Contributor in, the defense and any
+    related settlement negotiations. The Indemnified Contributor may
+    participate in any such claim at its own expense.
+
+    For example, a Contributor might include the Program in a commercial
+    product offering, Product X. That Contributor is then a Commercial
+    Contributor. If that Commercial Contributor then makes performance
+    claims, or offers warranties related to Product X, those performance
+    claims and warranties are such Commercial Contributor's responsibility
+    alone. Under this section, the Commercial Contributor would have to
+    defend claims against the other Contributors related to those performance
+    claims and warranties, and if a court requires any other Contributor to
+    pay any damages as a result, the Commercial Contributor must pay
+    those damages.
+
+    5. NO WARRANTY
+
+    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+    PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
+    BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+    IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
+    TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
+    PURPOSE. Each Recipient is solely responsible for determining the
+    appropriateness of using and distributing the Program and assumes all
+    risks associated with its exercise of rights under this Agreement,
+    including but not limited to the risks and costs of program errors,
+    compliance with applicable laws, damage to or loss of data, programs
+    or equipment, and unavailability or interruption of operations.
+
+    6. DISCLAIMER OF LIABILITY
+
+    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+    PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
+    SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+    PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+    EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGES.
+
+    7. GENERAL
+
+    If any provision of this Agreement is invalid or unenforceable under
+    applicable law, it shall not affect the validity or enforceability of
+    the remainder of the terms of this Agreement, and without further
+    action by the parties hereto, such provision shall be reformed to the
+    minimum extent necessary to make such provision valid and enforceable.
+
+    If Recipient institutes patent litigation against any entity
+    (including a cross-claim or counterclaim in a lawsuit) alleging that the
+    Program itself (excluding combinations of the Program with other software
+    or hardware) infringes such Recipient's patent(s), then such Recipient's
+    rights granted under Section 2(b) shall terminate as of the date such
+    litigation is filed.
+
+    All Recipient's rights under this Agreement shall terminate if it
+    fails to comply with any of the material terms or conditions of this
+    Agreement and does not cure such failure in a reasonable period of
+    time after becoming aware of such noncompliance. If all Recipient's
+    rights under this Agreement terminate, Recipient agrees to cease use
+    and distribution of the Program as soon as reasonably practicable.
+    However, Recipient's obligations under this Agreement and any licenses
+    granted by Recipient relating to the Program shall continue and survive.
+
+    Everyone is permitted to copy and distribute copies of this Agreement,
+    but in order to avoid inconsistency the Agreement is copyrighted and
+    may only be modified in the following manner. The Agreement Steward
+    reserves the right to publish new versions (including revisions) of
+    this Agreement from time to time. No one other than the Agreement
+    Steward has the right to modify this Agreement. The Eclipse Foundation
+    is the initial Agreement Steward. The Eclipse Foundation may assign the
+    responsibility to serve as the Agreement Steward to a suitable separate
+    entity. Each new version of the Agreement will be given a distinguishing
+    version number. The Program (including Contributions) may always be
+    Distributed subject to the version of the Agreement under which it was
+    received. In addition, after a new version of the Agreement is published,
+    Contributor may elect to Distribute the Program (including its
+    Contributions) under the new version.
+
+    Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+    receives no rights or licenses to the intellectual property of any
+    Contributor under this Agreement, whether expressly, by implication,
+    estoppel or otherwise. All rights in the Program not expressly granted
+    under this Agreement are reserved. Nothing in this Agreement is intended
+    to be enforceable by any entity that is not a Contributor or Recipient.
+    No third-party beneficiary rights are created under this Agreement.
+
+    Exhibit A - Form of Secondary Licenses Notice
+
+    "This Source Code may also be made available under the following
+    Secondary Licenses when the conditions for such availability set forth
+    in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+    version(s), and exceptions or additional permissions here}."
+
+      Simply including a copy of this Agreement, including this Exhibit A
+      is not sufficient to license the Source Code under Secondary Licenses.
+
+      If it is not possible or desirable to put the notice in a particular
+      file, then You may include the notice in a location (such as a LICENSE
+      file in a relevant directory) where a recipient would be likely to
+      look for such a notice.
+
+      You may add additional accurate notices of copyright ownership.
diff --git a/solr/licenses/jakarta.websocket-api-NOTICE.txt b/solr/licenses/jakarta.websocket-api-NOTICE.txt
new file mode 100644
index 0000000..9707a77
--- /dev/null
+++ b/solr/licenses/jakarta.websocket-api-NOTICE.txt
@@ -0,0 +1,48 @@
+# Notices for Jakarta WebSocket
+
+This content is produced and maintained by the Jakarta WebSocket project.
+
+* Project home: https://projects.eclipse.org/projects/ee4j.websocket
+
+## Trademarks
+
+Jakarta WebSocket is a trademark of the Eclipse Foundation.
+
+## Copyright
+
+All content is the property of the respective authors or their employers. For
+more information regarding authorship of content, please consult the listed
+source code repository logs.
+
+## Declared Project Licenses
+
+This program and the accompanying materials are made available under the terms
+of the Eclipse Public License v. 2.0 which is available at
+http://www.eclipse.org/legal/epl-2.0. This Source Code may also be made
+available under the following Secondary Licenses when the conditions for such
+availability set forth in the Eclipse Public License v. 2.0 are satisfied: GNU
+General Public License, version 2 with the GNU Classpath Exception which is
+available at https://www.gnu.org/software/classpath/license.html.
+
+SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+
+## Source Code
+
+The project maintains the following source code repositories:
+
+* https://github.com/eclipse-ee4j/websocket-api
+
+## Third-party Content
+
+This project leverages the following third party content.
+
+None
+
+## Cryptography
+
+Content may contain encryption software. The country in which you are currently
+may have restrictions on the import, possession, and use, and/or re-export to
+another country, of encryption software. BEFORE using any encryption software,
+please check the country's laws, regulations and policies concerning the import,
+possession, or use, and re-export of encryption software, to see if this is
+permitted.
diff --git a/solr/licenses/jakarta.xml.bind-api-2.3.2.jar.sha1 b/solr/licenses/jakarta.xml.bind-api-2.3.2.jar.sha1
new file mode 100644
index 0000000..14f8f9d
--- /dev/null
+++ b/solr/licenses/jakarta.xml.bind-api-2.3.2.jar.sha1
@@ -0,0 +1 @@
+8d49996a4338670764d7ca4b85a1c4ccf7fe665d
diff --git a/solr/licenses/jakarta.xml.bind-api-LICENSE-BSD_LIKE.txt b/solr/licenses/jakarta.xml.bind-api-LICENSE-BSD_LIKE.txt
new file mode 100644
index 0000000..e0cdfb1
--- /dev/null
+++ b/solr/licenses/jakarta.xml.bind-api-LICENSE-BSD_LIKE.txt
@@ -0,0 +1,13 @@
+Eclipse Distribution License - v 1.0
+
+Copyright (c) 2007, Eclipse Foundation, Inc. and its licensors.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+- Neither the name of the Eclipse Foundation, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFI [...]
\ No newline at end of file
diff --git a/solr/licenses/jakarta.xml.bind-api-NOTICE.txt b/solr/licenses/jakarta.xml.bind-api-NOTICE.txt
new file mode 100644
index 0000000..5aac171
--- /dev/null
+++ b/solr/licenses/jakarta.xml.bind-api-NOTICE.txt
@@ -0,0 +1,44 @@
+# Notices for Eclipse Project for JAXB
+
+This content is produced and maintained by the Eclipse Project for JAXB project.
+
+* Project home: https://projects.eclipse.org/projects/ee4j.jaxb
+
+## Trademarks
+
+Eclipse Project for JAXB is a trademark of the Eclipse Foundation.
+
+## Copyright
+
+All content is the property of the respective authors or their employers. For
+more information regarding authorship of content, please consult the listed
+source code repository logs.
+
+## Declared Project Licenses
+
+This program and the accompanying materials are made available under the terms
+of the Eclipse Distribution License v. 1.0 which is available
+at http://www.eclipse.org/org/documents/edl-v10.php.
+
+SPDX-License-Identifier: BSD-3-Clause
+
+## Source Code
+
+The project maintains the following source code repositories:
+
+* https://github.com/eclipse-ee4j/jaxb-api
+
+## Third-party Content
+
+This project leverages the following third party content.
+
+None
+
+## Cryptography
+
+Content may contain encryption software. The country in which you are currently
+may have restrictions on the import, possession, and use, and/or re-export to
+another country, of encryption software. BEFORE using any encryption software,
+please check the country's laws, regulations and policies concerning the import,
+possession, or use, and re-export of encryption software, to see if this is
+permitted.
diff --git a/solr/licenses/jaxb-api-2.3.1.jar.sha1 b/solr/licenses/jaxb-api-2.3.1.jar.sha1
new file mode 100644
index 0000000..2f6376f
--- /dev/null
+++ b/solr/licenses/jaxb-api-2.3.1.jar.sha1
@@ -0,0 +1 @@
+8531ad5ac454cc2deb9d4d32c40c4d7451939b5d
diff --git a/solr/licenses/jaxb-api-LICENSE-CDDL.txt b/solr/licenses/jaxb-api-LICENSE-CDDL.txt
new file mode 100644
index 0000000..4a00ba9
--- /dev/null
+++ b/solr/licenses/jaxb-api-LICENSE-CDDL.txt
@@ -0,0 +1,362 @@
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.1
+
+1. Definitions.
+
+    1.1. "Contributor" means each individual or entity that creates or
+    contributes to the creation of Modifications.
+
+    1.2. "Contributor Version" means the combination of the Original
+    Software, prior Modifications used by a Contributor (if any), and
+    the Modifications made by that particular Contributor.
+
+    1.3. "Covered Software" means (a) the Original Software, or (b)
+    Modifications, or (c) the combination of files containing Original
+    Software with files containing Modifications, in each case including
+    portions thereof.
+
+    1.4. "Executable" means the Covered Software in any form other than
+    Source Code.
+
+    1.5. "Initial Developer" means the individual or entity that first
+    makes Original Software available under this License.
+
+    1.6. "Larger Work" means a work which combines Covered Software or
+    portions thereof with code not governed by the terms of this License.
+
+    1.7. "License" means this document.
+
+    1.8. "Licensable" means having the right to grant, to the maximum
+    extent possible, whether at the time of the initial grant or
+    subsequently acquired, any and all of the rights conveyed herein.
+
+    1.9. "Modifications" means the Source Code and Executable form of
+    any of the following:
+
+    A. Any file that results from an addition to, deletion from or
+    modification of the contents of a file containing Original Software
+    or previous Modifications;
+
+    B. Any new file that contains any part of the Original Software or
+    previous Modification; or
+
+    C. Any new file that is contributed or otherwise made available
+    under the terms of this License.
+
+    1.10. "Original Software" means the Source Code and Executable form
+    of computer software code that is originally released under this
+    License.
+
+    1.11. "Patent Claims" means any patent claim(s), now owned or
+    hereafter acquired, including without limitation, method, process,
+    and apparatus claims, in any patent Licensable by grantor.
+
+    1.12. "Source Code" means (a) the common form of computer software
+    code in which modifications are made and (b) associated
+    documentation included in or with such code.
+
+    1.13. "You" (or "Your") means an individual or a legal entity
+    exercising rights under, and complying with all of the terms of,
+    this License. For legal entities, "You" includes any entity which
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants.
+
+    2.1. The Initial Developer Grant.
+
+    Conditioned upon Your compliance with Section 3.1 below and subject
+    to third party intellectual property claims, the Initial Developer
+    hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+    (a) under intellectual property rights (other than patent or
+    trademark) Licensable by Initial Developer, to use, reproduce,
+    modify, display, perform, sublicense and distribute the Original
+    Software (or portions thereof), with or without Modifications,
+    and/or as part of a Larger Work; and
+
+    (b) under Patent Claims infringed by the making, using or selling of
+    Original Software, to make, have made, use, practice, sell, and
+    offer for sale, and/or otherwise dispose of the Original Software
+    (or portions thereof).
+
+    (c) The licenses granted in Sections 2.1(a) and (b) are effective on
+    the date Initial Developer first distributes or otherwise makes the
+    Original Software available to a third party under the terms of this
+    License.
+
+    (d) Notwithstanding Section 2.1(b) above, no patent license is
+    granted: (1) for code that You delete from the Original Software, or
+    (2) for infringements caused by: (i) the modification of the
+    Original Software, or (ii) the combination of the Original Software
+    with other software or devices.
+
+    2.2. Contributor Grant.
+
+    Conditioned upon Your compliance with Section 3.1 below and subject
+    to third party intellectual property claims, each Contributor hereby
+    grants You a world-wide, royalty-free, non-exclusive license:
+
+    (a) under intellectual property rights (other than patent or
+    trademark) Licensable by Contributor to use, reproduce, modify,
+    display, perform, sublicense and distribute the Modifications
+    created by such Contributor (or portions thereof), either on an
+    unmodified basis, with other Modifications, as Covered Software
+    and/or as part of a Larger Work; and
+
+    (b) under Patent Claims infringed by the making, using, or selling
+    of Modifications made by that Contributor either alone and/or in
+    combination with its Contributor Version (or portions of such
+    combination), to make, use, sell, offer for sale, have made, and/or
+    otherwise dispose of: (1) Modifications made by that Contributor (or
+    portions thereof); and (2) the combination of Modifications made by
+    that Contributor with its Contributor Version (or portions of such
+    combination).
+
+    (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective
+    on the date Contributor first distributes or otherwise makes the
+    Modifications available to a third party.
+
+    (d) Notwithstanding Section 2.2(b) above, no patent license is
+    granted: (1) for any code that Contributor has deleted from the
+    Contributor Version; (2) for infringements caused by: (i) third
+    party modifications of Contributor Version, or (ii) the combination
+    of Modifications made by that Contributor with other software
+    (except as part of the Contributor Version) or other devices; or (3)
+    under Patent Claims infringed by Covered Software in the absence of
+    Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+    3.1. Availability of Source Code.
+
+    Any Covered Software that You distribute or otherwise make available
+    in Executable form must also be made available in Source Code form
+    and that Source Code form must be distributed only under the terms
+    of this License. You must include a copy of this License with every
+    copy of the Source Code form of the Covered Software You distribute
+    or otherwise make available. You must inform recipients of any such
+    Covered Software in Executable form as to how they can obtain such
+    Covered Software in Source Code form in a reasonable manner on or
+    through a medium customarily used for software exchange.
+
+    3.2. Modifications.
+
+    The Modifications that You create or to which You contribute are
+    governed by the terms of this License. You represent that You
+    believe Your Modifications are Your original creation(s) and/or You
+    have sufficient rights to grant the rights conveyed by this License.
+
+    3.3. Required Notices.
+
+    You must include a notice in each of Your Modifications that
+    identifies You as the Contributor of the Modification. You may not
+    remove or alter any copyright, patent or trademark notices contained
+    within the Covered Software, or any notices of licensing or any
+    descriptive text giving attribution to any Contributor or the
+    Initial Developer.
+
+    3.4. Application of Additional Terms.
+
+    You may not offer or impose any terms on any Covered Software in
+    Source Code form that alters or restricts the applicable version of
+    this License or the recipients' rights hereunder. You may choose to
+    offer, and to charge a fee for, warranty, support, indemnity or
+    liability obligations to one or more recipients of Covered Software.
+    However, you may do so only on Your own behalf, and not on behalf of
+    the Initial Developer or any Contributor. You must make it
+    absolutely clear that any such warranty, support, indemnity or
+    liability obligation is offered by You alone, and You hereby agree
+    to indemnify the Initial Developer and every Contributor for any
+    liability incurred by the Initial Developer or such Contributor as a
+    result of warranty, support, indemnity or liability terms You offer.
+
+    3.5. Distribution of Executable Versions.
+
+    You may distribute the Executable form of the Covered Software under
+    the terms of this License or under the terms of a license of Your
+    choice, which may contain terms different from this License,
+    provided that You are in compliance with the terms of this License
+    and that the license for the Executable form does not attempt to
+    limit or alter the recipient's rights in the Source Code form from
+    the rights set forth in this License. If You distribute the Covered
+    Software in Executable form under a different license, You must make
+    it absolutely clear that any terms which differ from this License
+    are offered by You alone, not by the Initial Developer or
+    Contributor. You hereby agree to indemnify the Initial Developer and
+    every Contributor for any liability incurred by the Initial
+    Developer or such Contributor as a result of any such terms You offer.
+
+    3.6. Larger Works.
+
+    You may create a Larger Work by combining Covered Software with
+    other code not governed by the terms of this License and distribute
+    the Larger Work as a single product. In such a case, You must make
+    sure the requirements of this License are fulfilled for the Covered
+    Software.
+
+4. Versions of the License.
+
+    4.1. New Versions.
+
+    Oracle is the initial license steward and may publish revised and/or
+    new versions of this License from time to time. Each version will be
+    given a distinguishing version number. Except as provided in Section
+    4.3, no one other than the license steward has the right to modify
+    this License.
+
+    4.2. Effect of New Versions.
+
+    You may always continue to use, distribute or otherwise make the
+    Covered Software available under the terms of the version of the
+    License under which You originally received the Covered Software. If
+    the Initial Developer includes a notice in the Original Software
+    prohibiting it from being distributed or otherwise made available
+    under any subsequent version of the License, You must distribute and
+    make the Covered Software available under the terms of the version
+    of the License under which You originally received the Covered
+    Software. Otherwise, You may also choose to use, distribute or
+    otherwise make the Covered Software available under the terms of any
+    subsequent version of the License published by the license steward.
+
+    4.3. Modified Versions.
+
+    When You are an Initial Developer and You want to create a new
+    license for Your Original Software, You may create and use a
+    modified version of this License if You: (a) rename the license and
+    remove any references to the name of the license steward (except to
+    note that the license differs from this License); and (b) otherwise
+    make it clear that the license contains terms which differ from this
+    License.
+
+5. DISCLAIMER OF WARRANTY.
+
+    COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+    WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+    INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE
+    IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR
+    NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF
+    THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE
+    DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY
+    OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING,
+    REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN
+    ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS
+    AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+6. TERMINATION.
+
+    6.1. This License and the rights granted hereunder will terminate
+    automatically if You fail to comply with terms herein and fail to
+    cure such breach within 30 days of becoming aware of the breach.
+    Provisions which, by their nature, must remain in effect beyond the
+    termination of this License shall survive.
+
+    6.2. If You assert a patent infringement claim (excluding
+    declaratory judgment actions) against Initial Developer or a
+    Contributor (the Initial Developer or Contributor against whom You
+    assert such claim is referred to as "Participant") alleging that the
+    Participant Software (meaning the Contributor Version where the
+    Participant is a Contributor or the Original Software where the
+    Participant is the Initial Developer) directly or indirectly
+    infringes any patent, then any and all rights granted directly or
+    indirectly to You by such Participant, the Initial Developer (if the
+    Initial Developer is not the Participant) and all Contributors under
+    Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice
+    from Participant terminate prospectively and automatically at the
+    expiration of such 60 day notice period, unless if within such 60
+    day period You withdraw Your claim with respect to the Participant
+    Software against such Participant either unilaterally or pursuant to
+    a written agreement with Participant.
+
+    6.3. If You assert a patent infringement claim against Participant
+    alleging that the Participant Software directly or indirectly
+    infringes any patent where such claim is resolved (such as by
+    license or settlement) prior to the initiation of patent
+    infringement litigation, then the reasonable value of the licenses
+    granted by such Participant under Sections 2.1 or 2.2 shall be taken
+    into account in determining the amount or value of any payment or
+    license.
+
+    6.4. In the event of termination under Sections 6.1 or 6.2 above,
+    all end user licenses that have been validly granted by You or any
+    distributor hereunder prior to termination (excluding licenses
+    granted to You by any distributor) shall survive termination.
+
+7. LIMITATION OF LIABILITY.
+
+    UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+    (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE
+    INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF
+    COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE
+    TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR
+    CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT
+    LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER
+    FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR
+    LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE
+    POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT
+    APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH
+    PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH
+    LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR
+    LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION
+    AND LIMITATION MAY NOT APPLY TO YOU.
+
+8. U.S. GOVERNMENT END USERS.
+
+    The Covered Software is a "commercial item," as that term is defined
+    in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+    software" (as that term is defined at 48 C.F.R. ยง
+    252.227-7014(a)(1)) and "commercial computer software documentation"
+    as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent
+    with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4
+    (June 1995), all U.S. Government End Users acquire Covered Software
+    with only those rights set forth herein. This U.S. Government Rights
+    clause is in lieu of, and supersedes, any other FAR, DFAR, or other
+    clause or provision that addresses Government rights in computer
+    software under this License.
+
+9. MISCELLANEOUS.
+
+    This License represents the complete agreement concerning subject
+    matter hereof. If any provision of this License is held to be
+    unenforceable, such provision shall be reformed only to the extent
+    necessary to make it enforceable. This License shall be governed by
+    the law of the jurisdiction specified in a notice contained within
+    the Original Software (except to the extent applicable law, if any,
+    provides otherwise), excluding such jurisdiction's conflict-of-law
+    provisions. Any litigation relating to this License shall be subject
+    to the jurisdiction of the courts located in the jurisdiction and
+    venue specified in a notice contained within the Original Software,
+    with the losing party responsible for costs, including, without
+    limitation, court costs and reasonable attorneys' fees and expenses.
+    The application of the United Nations Convention on Contracts for
+    the International Sale of Goods is expressly excluded. Any law or
+    regulation which provides that the language of a contract shall be
+    construed against the drafter shall not apply to this License. You
+    agree that You alone are responsible for compliance with the United
+    States export administration regulations (and the export control
+    laws and regulation of any other countries) when You use, distribute
+    or otherwise make available any Covered Software.
+
+10. RESPONSIBILITY FOR CLAIMS.
+
+    As between Initial Developer and the Contributors, each party is
+    responsible for claims and damages arising, directly or indirectly,
+    out of its utilization of rights under this License and You agree to
+    work with Initial Developer and Contributors to distribute such
+    responsibility on an equitable basis. Nothing herein is intended or
+    shall be deemed to constitute any admission of liability.
+
+------------------------------------------------------------------------
+
+NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION
+LICENSE (CDDL)
+
+The code released under the CDDL shall be governed by the laws of the
+State of California (excluding conflict-of-law provisions). Any
+litigation relating to this License shall be subject to the jurisdiction
+of the Federal Courts of the Northern District of California and the
+state courts of the State of California, with venue lying in Santa Clara
+County, California.
diff --git a/solr/licenses/jaxb-api-NOTICE.txt b/solr/licenses/jaxb-api-NOTICE.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/solr/licenses/jaxb-api-NOTICE.txt
@@ -0,0 +1 @@
+
diff --git a/solr/licenses/jmespath-java-1.12.42.jar.sha1 b/solr/licenses/jmespath-java-1.12.42.jar.sha1
new file mode 100644
index 0000000..0199823
--- /dev/null
+++ b/solr/licenses/jmespath-java-1.12.42.jar.sha1
@@ -0,0 +1 @@
+cd640c3b665e43ff036a3728885acb7003cca757
diff --git a/solr/licenses/jmespath-java-LICENSE-ASL.txt b/solr/licenses/jmespath-java-LICENSE-ASL.txt
new file mode 100644
index 0000000..1eef70a
--- /dev/null
+++ b/solr/licenses/jmespath-java-LICENSE-ASL.txt
@@ -0,0 +1,206 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
+
+   Note: Other license terms may apply to certain, identified software files contained within or distributed
+   with the accompanying software if such terms are included in the directory containing the accompanying software.
+   Such other license terms will then apply in lieu of the terms of the software license above.
diff --git a/solr/licenses/jmespath-java-NOTICE.txt b/solr/licenses/jmespath-java-NOTICE.txt
new file mode 100644
index 0000000..7b5a068
--- /dev/null
+++ b/solr/licenses/jmespath-java-NOTICE.txt
@@ -0,0 +1,25 @@
+AWS SDK for Java 2.0
+Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+This product includes software developed by
+Amazon Technologies, Inc (http://www.amazon.com/).
+
+**********************
+THIRD PARTY COMPONENTS
+**********************
+This software includes third party software subject to the following copyrights:
+- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty.
+- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc.
+- Apache Commons Lang - https://github.com/apache/commons-lang
+- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams
+- Jackson-core - https://github.com/FasterXML/jackson-core
+- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary
+
+The licenses for these third party components are included in LICENSE.txt
+
+- For Apache Commons Lang see also this required NOTICE:
+  Apache Commons Lang
+  Copyright 2001-2020 The Apache Software Foundation
+  
+  This product includes software developed at
+  The Apache Software Foundation (https://www.apache.org/).
diff --git a/solr/licenses/joda-time-2.9.9.jar.sha1 b/solr/licenses/joda-time-2.9.9.jar.sha1
new file mode 100644
index 0000000..f81faed
--- /dev/null
+++ b/solr/licenses/joda-time-2.9.9.jar.sha1
@@ -0,0 +1 @@
+f7b520c458572890807d143670c9b24f4de90897
diff --git a/solr/licenses/joda-time-LICENSE-ASL.txt b/solr/licenses/joda-time-LICENSE-ASL.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/solr/licenses/joda-time-LICENSE-ASL.txt
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
... 8288 lines suppressed ...