diff --git a/THIRD-PARTY.txt b/THIRD-PARTY.txt index 8078b188e..bc55e8733 100644 --- a/THIRD-PARTY.txt +++ b/THIRD-PARTY.txt @@ -54,46 +54,45 @@ List of third-party dependencies grouped by their license type. * Apache Solr (module: solrj) (org.apache.solr:solr-solrj:10.0.0 - https://solr.apache.org/) * Apache Solr (module: solrj-jetty) (org.apache.solr:solr-solrj-jetty:10.0.0 - https://solr.apache.org/) * Apache Solr (module: solrj-zookeeper) (org.apache.solr:solr-solrj-zookeeper:10.0.0 - https://solr.apache.org/) - * Apache Tika Apple parser module (org.apache.tika:tika-parser-apple-module:4.1.0 - https://tika.apache.org/tika-parser-apple-module/) - * Apache Tika audiovideo parser module (org.apache.tika:tika-parser-audiovideo-module:4.1.0 - https://tika.apache.org/tika-parser-audiovideo-module/) - * Apache Tika cad parser module (org.apache.tika:tika-parser-cad-module:4.1.0 - https://tika.apache.org/tika-parser-cad-module/) - * Apache Tika code parser module (org.apache.tika:tika-parser-code-module:4.1.0 - https://tika.apache.org/tika-parser-code-module/) - * Apache Tika core (org.apache.tika:tika-core:4.1.0 - https://tika.apache.org/) - * Apache Tika crypto parser module (org.apache.tika:tika-parser-crypto-module:4.1.0 - https://tika.apache.org/tika-parser-crypto-module/) - * Apache Tika data URI commons (org.apache.tika:tika-parser-datauri-commons:4.1.0 - https://tika.apache.org/tika-parser-datauri-commons/) - * Apache Tika digest commons (org.apache.tika:tika-parser-digest-commons:4.1.0 - https://tika.apache.org/tika-parser-digest-commons/) - * Apache Tika eval core (org.apache.tika:tika-eval-core:4.1.0 - https://tika.apache.org/tika-eval-core/) - * Apache Tika font parser module (org.apache.tika:tika-parser-font-module:4.1.0 - https://tika.apache.org/tika-parser-font-module/) - * Apache Tika HTML encoding detector (org.apache.tika:tika-encoding-detector-html:4.1.0 - https://tika.apache.org/tika-encoding-detectors/tika-encoding-detector-html/) - * Apache Tika html parser module (org.apache.tika:tika-parser-html-module:4.1.0 - https://tika.apache.org/tika-parser-html-module/) - * Apache Tika image parser module (org.apache.tika:tika-parser-image-module:4.1.0 - https://tika.apache.org/tika-parser-image-module/) - * Apache Tika langdetect (built-in charsoup) (org.apache.tika:tika-langdetect-charsoup:4.1.0 - https://tika.apache.org/tika-langdetect-charsoup/) - * Apache Tika langdetect (charsoup core — no Tika dependencies) (org.apache.tika:tika-langdetect-charsoup-core:4.1.0 - https://tika.apache.org/tika-langdetect-charsoup-core/) - * Apache Tika mail commons (org.apache.tika:tika-parser-mail-commons:4.1.0 - https://tika.apache.org/tika-parser-mail-commons/) - * Apache Tika mail parser module (org.apache.tika:tika-parser-mail-module:4.1.0 - https://tika.apache.org/tika-parser-mail-module/) - * Apache Tika Microsoft parser module (org.apache.tika:tika-parser-microsoft-module:4.1.0 - https://tika.apache.org/tika-parser-microsoft-module/) - * Apache Tika miscellaneous office format parser module (org.apache.tika:tika-parser-miscoffice-module:4.1.0 - https://tika.apache.org/tika-parser-miscoffice-module/) - * Apache Tika ML charset encoding detector (org.apache.tika:tika-encoding-detector-mojibuster:4.1.0 - https://tika.apache.org/tika-encoding-detectors/tika-encoding-detector-mojibuster/) - * Apache Tika ML core (no Tika dependencies) (org.apache.tika:tika-ml-core:4.1.0 - https://tika.apache.org/tika-ml-core/) - * Apache Tika ML junk detector — runtime and training tools (org.apache.tika:tika-ml-junkdetect:4.1.0 - https://tika.apache.org/tika-ml-junkdetect/) - * Apache Tika news parser module (org.apache.tika:tika-parser-news-module:4.1.0 - https://tika.apache.org/tika-parser-news-module/) - * Apache Tika OCR parser module (org.apache.tika:tika-parser-ocr-module:4.1.0 - https://tika.apache.org/tika-parser-ocr-module/) - * Apache Tika package parser module (org.apache.tika:tika-parser-pkg-module:4.1.0 - https://tika.apache.org/tika-parser-pkg-module/) - * Apache Tika PDF parser module (org.apache.tika:tika-parser-pdf-module:4.1.0 - https://tika.apache.org/tika-parser-pdf-module/) - * Apache Tika pipes api (org.apache.tika:tika-pipes-api:4.1.0 - https://tika.apache.org/) - * Apache Tika pipes core (org.apache.tika:tika-pipes-core:4.1.0 - https://tika.apache.org/) - * Apache Tika Pipes File System (org.apache.tika:tika-pipes-file-system:4.1.0 - https://tika.apache.org/tika-pipes-file-system/) - * Apache Tika pipes fork parser (org.apache.tika:tika-pipes-fork-parser:4.1.0 - https://tika.apache.org/) - * Apache Tika Pipes iterators - base (org.apache.tika:tika-pipes-iterator-commons:4.1.0 - https://tika.apache.org/) - * Apache Tika Pipes Reporter - base (org.apache.tika:tika-pipes-reporter-commons:4.1.0 - https://tika.apache.org/) - * Apache Tika plugins core (org.apache.tika:tika-plugins-core:4.1.0 - https://tika.apache.org) - * Apache Tika serialization (org.apache.tika:tika-serialization:4.1.0 - https://tika.apache.org) - * Apache Tika standard parser package (org.apache.tika:tika-parsers-standard-package:4.1.0 - https://tika.apache.org/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/) - * Apache Tika text parser module (org.apache.tika:tika-parser-text-module:4.1.0 - https://tika.apache.org/tika-parser-text-module/) - * Apache Tika WARC parser module (org.apache.tika:tika-parser-webarchive-module:4.1.0 - https://tika.apache.org/tika-parser-webarchive-module/) - * Apache Tika XML parser module (org.apache.tika:tika-parser-xml-module:4.1.0 - https://tika.apache.org/tika-parser-xml-module/) - * Apache Tika XMP commons (org.apache.tika:tika-parser-xmp-commons:4.1.0 - https://tika.apache.org/tika-parser-xmp-commons/) - * Apache Tika ZIP commons (org.apache.tika:tika-parser-zip-commons:4.1.0 - https://tika.apache.org/tika-parser-zip-commons/) + * Apache Tika Apple parser module (org.apache.tika:tika-parser-apple-module:4.2.0 - https://tika.apache.org/tika-parser-apple-module/) + * Apache Tika audiovideo parser module (org.apache.tika:tika-parser-audiovideo-module:4.2.0 - https://tika.apache.org/tika-parser-audiovideo-module/) + * Apache Tika cad parser module (org.apache.tika:tika-parser-cad-module:4.2.0 - https://tika.apache.org/tika-parser-cad-module/) + * Apache Tika code parser module (org.apache.tika:tika-parser-code-module:4.2.0 - https://tika.apache.org/tika-parser-code-module/) + * Apache Tika core (org.apache.tika:tika-core:4.2.0 - https://tika.apache.org/) + * Apache Tika crypto parser module (org.apache.tika:tika-parser-crypto-module:4.2.0 - https://tika.apache.org/tika-parser-crypto-module/) + * Apache Tika data URI commons (org.apache.tika:tika-parser-datauri-commons:4.2.0 - https://tika.apache.org/tika-parser-datauri-commons/) + * Apache Tika digest commons (org.apache.tika:tika-parser-digest-commons:4.2.0 - https://tika.apache.org/tika-parser-digest-commons/) + * Apache Tika eval core (org.apache.tika:tika-eval-core:4.2.0 - https://tika.apache.org/tika-eval-core/) + * Apache Tika font parser module (org.apache.tika:tika-parser-font-module:4.2.0 - https://tika.apache.org/tika-parser-font-module/) + * Apache Tika HTML encoding detector (org.apache.tika:tika-encoding-detector-html:4.2.0 - https://tika.apache.org/tika-encoding-detectors/tika-encoding-detector-html/) + * Apache Tika html parser module (org.apache.tika:tika-parser-html-module:4.2.0 - https://tika.apache.org/tika-parser-html-module/) + * Apache Tika image parser module (org.apache.tika:tika-parser-image-module:4.2.0 - https://tika.apache.org/tika-parser-image-module/) + * Apache Tika langdetect (built-in charsoup) (org.apache.tika:tika-langdetect-charsoup:4.2.0 - https://tika.apache.org/tika-langdetect-charsoup/) + * Apache Tika langdetect (charsoup core — no Tika dependencies) (org.apache.tika:tika-langdetect-charsoup-core:4.2.0 - https://tika.apache.org/tika-langdetect-charsoup-core/) + * Apache Tika mail parser module (org.apache.tika:tika-parser-mail-module:4.2.0 - https://tika.apache.org/tika-parser-mail-module/) + * Apache Tika Microsoft parser module (org.apache.tika:tika-parser-microsoft-module:4.2.0 - https://tika.apache.org/tika-parser-microsoft-module/) + * Apache Tika miscellaneous office format parser module (org.apache.tika:tika-parser-miscoffice-module:4.2.0 - https://tika.apache.org/tika-parser-miscoffice-module/) + * Apache Tika ML charset encoding detector (org.apache.tika:tika-encoding-detector-mojibuster:4.2.0 - https://tika.apache.org/tika-encoding-detectors/tika-encoding-detector-mojibuster/) + * Apache Tika ML core (no Tika dependencies) (org.apache.tika:tika-ml-core:4.2.0 - https://tika.apache.org/tika-ml-core/) + * Apache Tika ML junk detector — runtime and training tools (org.apache.tika:tika-ml-junkdetect:4.2.0 - https://tika.apache.org/tika-ml-junkdetect/) + * Apache Tika news parser module (org.apache.tika:tika-parser-news-module:4.2.0 - https://tika.apache.org/tika-parser-news-module/) + * Apache Tika OCR parser module (org.apache.tika:tika-parser-ocr-module:4.2.0 - https://tika.apache.org/tika-parser-ocr-module/) + * Apache Tika package parser module (org.apache.tika:tika-parser-pkg-module:4.2.0 - https://tika.apache.org/tika-parser-pkg-module/) + * Apache Tika PDF parser module (org.apache.tika:tika-parser-pdf-module:4.2.0 - https://tika.apache.org/tika-parser-pdf-module/) + * Apache Tika pipes api (org.apache.tika:tika-pipes-api:4.2.0 - https://tika.apache.org/) + * Apache Tika pipes core (org.apache.tika:tika-pipes-core:4.2.0 - https://tika.apache.org/) + * Apache Tika Pipes File System (org.apache.tika:tika-pipes-file-system:4.2.0 - https://tika.apache.org/tika-pipes-file-system/) + * Apache Tika pipes fork parser (org.apache.tika:tika-pipes-fork-parser:4.2.0 - https://tika.apache.org/) + * Apache Tika Pipes iterators - base (org.apache.tika:tika-pipes-iterator-commons:4.2.0 - https://tika.apache.org/) + * Apache Tika Pipes Reporter - base (org.apache.tika:tika-pipes-reporter-commons:4.2.0 - https://tika.apache.org/) + * Apache Tika plugins core (org.apache.tika:tika-plugins-core:4.2.0 - https://tika.apache.org) + * Apache Tika serialization (org.apache.tika:tika-serialization:4.2.0 - https://tika.apache.org) + * Apache Tika standard parser package (org.apache.tika:tika-parsers-standard-package:4.2.0 - https://tika.apache.org/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/) + * Apache Tika text parser module (org.apache.tika:tika-parser-text-module:4.2.0 - https://tika.apache.org/tika-parser-text-module/) + * Apache Tika WARC parser module (org.apache.tika:tika-parser-webarchive-module:4.2.0 - https://tika.apache.org/tika-parser-webarchive-module/) + * Apache Tika XML parser module (org.apache.tika:tika-parser-xml-module:4.2.0 - https://tika.apache.org/tika-parser-xml-module/) + * Apache Tika XMP commons (org.apache.tika:tika-parser-xmp-commons:4.2.0 - https://tika.apache.org/tika-parser-xmp-commons/) + * Apache Tika ZIP commons (org.apache.tika:tika-parser-zip-commons:4.2.0 - https://tika.apache.org/tika-parser-zip-commons/) * Apache ZooKeeper - Jute (org.apache.zookeeper:zookeeper-jute:3.9.4 - http://zookeeper.apache.org/zookeeper-jute) * Apache ZooKeeper - Server (org.apache.zookeeper:zookeeper:3.9.4 - http://zookeeper.apache.org/zookeeper) * AWS Java SDK :: Annotations (software.amazon.awssdk:annotations:2.57.3 - https://aws.amazon.com/sdkforjava/core/annotations) @@ -131,7 +130,7 @@ List of third-party dependencies grouped by their license type. * AWS Java SDK :: Utilities (software.amazon.awssdk:utils:2.57.3 - https://aws.amazon.com/sdkforjava/utils) * AWS Java SDK :: Utils Lite (software.amazon.awssdk:utils-lite:2.57.3 - https://aws.amazon.com/sdkforjava) * Caffeine cache (com.github.ben-manes.caffeine:caffeine:3.3.1 - https://github.com/ben-manes/caffeine) - * com.drewnoakes:metadata-extractor (com.drewnoakes:metadata-extractor:2.21.0 - https://drewnoakes.com/code/exif/) + * com.drewnoakes:metadata-extractor (com.drewnoakes:metadata-extractor:2.22.0 - https://drewnoakes.com/code/exif/) * Crawler-commons (com.github.crawler-commons:crawler-commons:1.6 - https://github.com/crawler-commons/crawler-commons) * Curator Client (org.apache.curator:curator-client:5.9.0 - https://curator.apache.org/curator-client) * Curator Framework (org.apache.curator:curator-framework:5.9.0 - https://curator.apache.org/curator-framework) @@ -157,8 +156,8 @@ List of third-party dependencies grouped by their license type. * io.grpc:grpc-stub (io.grpc:grpc-stub:1.76.0 - https://github.com/grpc/grpc-java) * io.grpc:grpc-util (io.grpc:grpc-util:1.76.0 - https://github.com/grpc/grpc-java) * J2ObjC Annotations (com.google.j2objc:j2objc-annotations:3.1 - https://github.com/google/j2objc/) - * Jackcess (com.healthmarketscience.jackcess:jackcess:5.0.0 - https://jackcess.sourceforge.io) - * Jackcess Encrypt (com.healthmarketscience.jackcess:jackcess-encrypt:5.0.0 - http://jackcessencrypt.sf.net) + * Jackcess (com.healthmarketscience.jackcess:jackcess:5.0.4 - https://jackcess.sourceforge.io) + * Jackcess Encrypt (com.healthmarketscience.jackcess:jackcess-encrypt:5.0.2 - http://jackcessencrypt.sf.net) * Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.22 - https://github.com/FasterXML/jackson) * Jackson-core (com.fasterxml.jackson.core:jackson-core:2.22.0 - https://github.com/FasterXML/jackson-core) * jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.22.0 - https://github.com/FasterXML/jackson) @@ -272,9 +271,9 @@ List of third-party dependencies grouped by their license type. BSD-2-Clause - * commonmark-java core (org.commonmark:commonmark:0.30.0 - https://github.com/commonmark/commonmark-java/commonmark) - * commonmark-java extension for strikethrough (org.commonmark:commonmark-ext-gfm-strikethrough:0.30.0 - https://github.com/commonmark/commonmark-java/commonmark-ext-gfm-strikethrough) - * commonmark-java extension for tables (org.commonmark:commonmark-ext-gfm-tables:0.30.0 - https://github.com/commonmark/commonmark-java/commonmark-ext-gfm-tables) + * commonmark-java core (org.commonmark:commonmark:0.31.0 - https://github.com/commonmark/commonmark-java/commonmark) + * commonmark-java extension for strikethrough (org.commonmark:commonmark-ext-gfm-strikethrough:0.31.0 - https://github.com/commonmark/commonmark-java/commonmark-ext-gfm-strikethrough) + * commonmark-java extension for tables (org.commonmark:commonmark-ext-gfm-tables:0.31.0 - https://github.com/commonmark/commonmark-java/commonmark-ext-gfm-tables) BSD 2-Clause License @@ -283,7 +282,7 @@ List of third-party dependencies grouped by their license type. BSD 3-Clause License * Adobe XMPCore (com.adobe.xmp:xmpcore:6.1.11 - https://www.adobe.com/devnet/xmp/library/eula-xmp-library-java.html) - * asm (org.ow2.asm:asm:9.10.1 - http://asm.ow2.io/) + * asm (org.ow2.asm:asm:9.11.1 - http://asm.ow2.io/) * Protocol Buffers [Core] (com.google.protobuf:protobuf-java:3.25.8 - https://developers.google.com/protocol-buffers/protobuf-java/) * Protocol Buffers [Core] (com.google.protobuf:protobuf-java:4.36.1 - https://developers.google.com/protocol-buffers/protobuf-java/) * Protocol Buffers [Util] (com.google.protobuf:protobuf-java-util:3.25.8 - https://developers.google.com/protocol-buffers/protobuf-java-util/) @@ -371,4 +370,4 @@ List of third-party dependencies grouped by their license type. UnRar License - * Java Unrar (com.github.junrar:junrar:8.1.1 - https://github.com/junrar/junrar) + * Java Unrar (com.github.junrar:junrar:8.1.2 - https://github.com/junrar/junrar) diff --git a/docs/src/main/asciidoc/configuration.adoc b/docs/src/main/asciidoc/configuration.adoc index 0d7628940..ecc7660c3 100644 --- a/docs/src/main/asciidoc/configuration.adoc +++ b/docs/src/main/asciidoc/configuration.adoc @@ -575,7 +575,7 @@ See the link:https://github.com/apache/stormcrawler/tree/main/external/tika[tika | parser.tika.pdf.maxpages | -1 | Maximum number of pages of a PDF document to parse, 0 or less to keep the `maxPages` of the Tika configuration (no limit by default). The pages after it are skipped, their text and outlinks are not extracted. Other settings of `pdf-parser` in the `parse-context` section of the Tika configuration are kept. | parser.tika.timeout | -1 | Maximum time in milliseconds a document may take to parse, 0 or less for no limit. When set, the parse runs in a forked JVM (Tika Pipes), one per bolt instance; a parse that exceeds this is killed outright and reported to the status stream as an `ERROR` with the message `parse timeout`. A partial result returned between embedded documents is kept and marked `parse.text.trimmed`. When `parser.tika.text.maxlength` is negative (the default), the text is limited to 20,000,000 characters in this mode. Keep it well below `topology.message.timeout.secs`: the time a tuple waits behind a slow parse or a fork restart counts against that too. The forked JVM uses the `IdentityHtmlMapper` (the default), any other value of `parser.htmlmapper.classname` is ignored in this mode and Tika's `DefaultHtmlMapper` is used instead, see the README of the module. | parser.tika.pipes.jvmargs | -Xmx512m | JVM arguments passed to each forked process under `parser.tika.timeout`. `-Xmx512m` is added when they set no maximum heap (`-Xmx`, `-XX:MaxHeapSize` or `-XX:MaxRAM*`). -| parser.tika.pipes.maxfilesperprocess | - | Restart a forked process after this many documents under `parser.tika.timeout`, to bound slow leaks in parsing libraries. Unset uses Tika's default, 10000. +| parser.tika.pipes.maxfilesperprocess | - | Restart a forked process after this many documents under `parser.tika.timeout`, to bound slow leaks in parsing libraries. Unset uses Tika's default, 100000. | parser.tika.pipes.plugins.dir | - | Directory holding Tika Pipes plugin zips under `parser.tika.timeout`, not needed by default. Unset uses Tika's default plugin directory resolution. |=== diff --git a/external/tika/README.md b/external/tika/README.md index cbbad1400..24558dbb9 100644 --- a/external/tika/README.md +++ b/external/tika/README.md @@ -43,7 +43,7 @@ The number of pages parsed in a PDF document can be limited with `parser.tika.pd The time spent parsing a document can be limited with `parser.tika.timeout` (milliseconds, default `-1`, 0 or less means no limit). When set, the parse runs in a forked JVM via [Tika Pipes](https://tika.apache.org/docs/4.0.x/pipes/index.html), one per bolt instance. ParserBolt starts the fork during `prepare()` using a small test parse. A parse that reaches the hard deadline is reported as `parse timeout`; a partial result returned between embedded documents is kept and marked `parse.text.trimmed`. When `parser.tika.text.maxlength` is negative (the default), the text is limited to 20,000,000 characters in this mode. A forked JVM that dies while parsing, e.g. running out of memory, is reported as an `ERROR` with the message `parse crash` and restarted; the Storm worker is not affected. By default, Tika closes an idle fork after 60 seconds and starts another for the next document. Keep the timeout well below `topology.message.timeout.secs`: the time a tuple waits behind a slow parse or a fork restart counts against that too. -Each `ParserBolt` instance runs one fork, so a host needs the worker heap plus one fork heap per `ParserBolt` instance on it, and some overhead for each JVM. When several forks share a host, consider `-XX:ActiveProcessorCount` as well as a heap limit. A handful of related keys tune the forked JVMs: `parser.tika.pipes.jvmargs` (`-Xmx512m` is added when they set no maximum heap), `parser.tika.pipes.maxfilesperprocess` (restart a fork after this many documents, to bound slow leaks in parsing libraries; Tika's default is 10000), and `parser.tika.pipes.plugins.dir` (Tika Pipes plugins, not needed by default). Documents over 10MB are handed to the forked JVM through a temporary file in the worker's `java.io.tmpdir`. +Each `ParserBolt` instance runs one fork, so a host needs the worker heap plus one fork heap per `ParserBolt` instance on it, and some overhead for each JVM. When several forks share a host, consider `-XX:ActiveProcessorCount` as well as a heap limit. A handful of related keys tune the forked JVMs: `parser.tika.pipes.jvmargs` (`-Xmx512m` is added when they set no maximum heap), `parser.tika.pipes.maxfilesperprocess` (restart a fork after this many documents, to bound slow leaks in parsing libraries; Tika's default is 100000), and `parser.tika.pipes.plugins.dir` (Tika Pipes plugins, not needed by default). Documents over 10MB are handed to the forked JVM through a temporary file in the worker's `java.io.tmpdir`. ## JSoup filters diff --git a/external/tika/src/main/java/org/apache/stormcrawler/tika/ParserBolt.java b/external/tika/src/main/java/org/apache/stormcrawler/tika/ParserBolt.java index d7fce59eb..c53546324 100644 --- a/external/tika/src/main/java/org/apache/stormcrawler/tika/ParserBolt.java +++ b/external/tika/src/main/java/org/apache/stormcrawler/tika/ParserBolt.java @@ -889,7 +889,7 @@ ParseContext createParseContext() { private void setPdfParserConfig(ParseContext parseContext) { if (pdfParserConfig != null) { - parseContext.setJsonConfig(PDF_PARSER_CONFIG, pdfParserConfig); + parseContext.setJsonConfig(PDF_PARSER_CONFIG, JsonConfig.trusted(pdfParserConfig)); } } diff --git a/external/tika/src/test/java/org/apache/stormcrawler/tika/ParserBoltPdfMaxPagesTest.java b/external/tika/src/test/java/org/apache/stormcrawler/tika/ParserBoltPdfMaxPagesTest.java index 51e4f5f56..9f002f101 100644 --- a/external/tika/src/test/java/org/apache/stormcrawler/tika/ParserBoltPdfMaxPagesTest.java +++ b/external/tika/src/test/java/org/apache/stormcrawler/tika/ParserBoltPdfMaxPagesTest.java @@ -141,6 +141,7 @@ void keepsPdfSettingsOfTikaConfig() { Assertions.assertNotNull(config); Assertions.assertTrue(config.json().contains("\"maxPages\":2"), config.json()); Assertions.assertTrue(config.json().contains("\"extractInlineImages\":false")); + Assertions.assertTrue(config.trusted()); } @Test diff --git a/pom.xml b/pom.xml index 27086ec27..12aa489ce 100644 --- a/pom.xml +++ b/pom.xml @@ -69,7 +69,7 @@ under the License. 2.22 2.22.0 - 4.1.0 + 4.2.0 5.24.0 2.0.20 26.1.0