You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by bl...@apache.org on 2026/05/21 07:28:11 UTC

(groovy) branch feature/Cache_changes created (now cb74b15efd)

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

blackdrag pushed a change to branch feature/Cache_changes
in repository https://gitbox.apache.org/repos/asf/groovy.git


      at cb74b15efd GROOVY-12023: further fixes for multi threading and fixing some minor issues

This branch includes the following new commits:

     new 254c08cacf adding a lock free MRU field to CacheableCallSite to avoid SoftReference overhead. Since the target holds a hard reference as well, this should not introduce any extra memory pressure
     new 1acf9b9815 GROOVY-12023: add a PIC with configurable size for indy in fron of the existing cache
     new 539e4a47a2 GROOVY-12023: add tests to ensure PIC functionality and fix one existing test since the fallback logic changed
     new b48a20670b GROOVY-12023: adding documentation created by AI
     new 7cbbf97ae4 GROOVY-12023: fix multithreading
     new cb74b15efd GROOVY-12023: further fixes for multi threading and fixing some minor issues

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(groovy) 05/06: GROOVY-12023: fix multithreading

Posted by bl...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

blackdrag pushed a commit to branch feature/Cache_changes
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 7cbbf97ae48bceca7c0041f59fffa5fb3b798474
Author: Jochen Theodorou <bl...@gmx.org>
AuthorDate: Thu May 21 06:30:57 2026 +0200

    GROOVY-12023: fix multithreading
---
 gradle/verification-metadata.xml                   | 613 +++++++++++++++++++++
 .../groovy/vmplugin/v8/CacheableCallSite.java      | 110 +++-
 .../codehaus/groovy/vmplugin/v8/IndyInterface.java |  40 +-
 .../v8/IndyInterfaceCallSiteTargetTest.groovy      |  10 +
 4 files changed, 744 insertions(+), 29 deletions(-)

diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index 70aa232ea0..e7ec017528 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -258,31 +258,37 @@
    <components>
       <component group="aopalliance" name="aopalliance" version="1.0">
          <artifact name="aopalliance-1.0.jar">
+            <sha256 value="0addec670fedcd3f113c5c8091d783280d23f75e3acb841b61a9cdb079376a08" origin="Generated by Gradle"/>
             <sha512 value="3f44a932d8c00cfeee2eb057bcd7c301a2d029063e0a916e1e20b3aec4877d19d67a2fd8aaf58fa2d5a00133d1602128a7f50912ffb6cabc7b0fdc7fbda3f8a1" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="backport-util-concurrent" name="backport-util-concurrent" version="3.1">
          <artifact name="backport-util-concurrent-3.1.jar">
+            <sha256 value="f5759b7fcdfc83a525a036deedcbd32e5b536b625ebc282426f16ca137eb5902" origin="Generated by Gradle"/>
             <sha512 value="5f881cb5fc18df80f574ab3af261ef4a45a628794b40c3ffd896af98b9fbbf06ad65ac41e0688fefc9769901bc84a0eff866c77bf07af467a26c811003845f62" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="biz.aQute.bnd" name="biz.aQute.bnd.annotation" version="7.1.0">
          <artifact name="biz.aQute.bnd.annotation-7.1.0.jar">
+            <sha256 value="f69c2de3a695c113d125ac8053c92a680a3ce9d02ea25845095cf2d4626a7663" origin="Generated by Gradle"/>
             <sha512 value="b29e68403ff0b0cd0efacf23a466390b922ef464f79b49c25518864839a1cd86329ace0a7214c6f0ce99056019d857301994bbb71dea0c35dd94511edd789ca4" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="biz.aQute.bnd" name="biz.aQute.bnd.util" version="6.4.1">
          <artifact name="biz.aQute.bnd.util-6.4.1.jar">
+            <sha256 value="810e144c4ca70a16da0917b7571b90331e16ac60434c21f3770573542f31dc6d" origin="Generated by Gradle"/>
             <sha512 value="e7f79bcd59a5ceeda4f3182aca78247483b901a9590e6c2993522bc3e8c38c2ed6d4d3738e788337da7664d8d217e9d538a34728cee5e62a12edf051966e92a0" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="biz.aQute.bnd" name="biz.aQute.bndlib" version="6.4.1">
          <artifact name="biz.aQute.bndlib-6.4.1.jar">
+            <sha256 value="5b5be3f48fbec33bdc19593e9b76c1b17e16385c0025bf5d97c35bcc86f8cb1d" origin="Generated by Gradle"/>
             <sha512 value="d2f78daa02b5baa56a43ebb540257da2726443772075c1fdb84e945f4a5bed56edd51ac55f76740bd92e1c0465c7b3750991d51d7265719c36cc23362d73c78c" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="cglib" name="cglib" version="3.3.0">
          <artifact name="cglib-3.3.0.jar">
+            <sha256 value="9fe0c26d7464140ccdfe019ac687be1fb906122b508ab54beb810db0f09a9212" origin="Generated by Gradle"/>
             <sha512 value="9eaee4a52bd9261364bff9f7dee145f3d7f7e1a842bbb179c6c9fec065beb162bea312b566c875db20dea317bd76267774c73e102e9ee46ab27c4c2b488bf96b" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -293,6 +299,7 @@
       </component>
       <component group="ch.qos.logback" name="logback-classic" version="1.5.32">
          <artifact name="logback-classic-1.5.32.jar">
+            <sha256 value="2d4cf592db78be2de4d6140434c2fec170dcb16a09e8c8b7b207dbf5e31b848a" origin="Generated by Gradle"/>
             <sha512 value="6f28dbc23ce773773fdd73801aaa9491c3300fa0888efdbc48909a60f191df4536328d2aeb6f0e91f05275bfd55b2b220ed2c30ce5ed4f31012f42eb11d79d7c" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -303,6 +310,7 @@
       </component>
       <component group="ch.qos.logback" name="logback-core" version="1.5.32">
          <artifact name="logback-core-1.5.32.jar">
+            <sha256 value="6a904d5778d0e361a9692f9cbe68b1b0620ae0f3eda2ec2ed09102755bf036c4" origin="Generated by Gradle"/>
             <sha512 value="7e118f88ff9f6bdd2854a4218c4d8e2a1a031eb0cbff7eb2b181fc162d5004b6d89e7b4586616fffd922b4b7a432395892b9caa04916b114a87b518a1abd5157" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -313,11 +321,13 @@
       </component>
       <component group="classworlds" name="classworlds" version="1.1-alpha-2">
          <artifact name="classworlds-1.1-alpha-2.jar">
+            <sha256 value="2bf4e59f3acd106fea6145a9a88fe8956509f8b9c0fdd11eb96fee757269e3f3" origin="Generated by Gradle"/>
             <sha512 value="eb7752c709ec703764de895099661df36536ff4bd2380bd68726d0cdb40bd27c8cf775ee98fd2ce7b3cfbd07b100c782513d964a2c9c82f33c56909212e5b8cd" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="com.baulsupp.kolja" name="jcurses" version="0.9.5.3">
          <artifact name="jcurses-0.9.5.3.jar">
+            <sha256 value="8f004d5eda442260865dd445dadc6c1f493e7ff31a0a801c575a67fb2b992e3f" origin="Generated by Gradle"/>
             <sha512 value="a017dd85aea145343c5a955cc8ba60e47d1f9f6b6e3680e813a51f668db90bb0e34a7282e1467ff992311165fed5d70adaa83222eb862caea7c0c96a6ddd895b" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
@@ -336,23 +346,27 @@
       <component group="com.eed3si9n.jarjar" name="ant-jarjar" version="1.16.0">
          <artifact name="ant-jarjar-1.16.0.jar">
             <pgp value="EA313384CA0EBA950EA017E937890E298D9A2BFA"/>
+            <sha256 value="7f4d95e0877bf15ad52246f8de6c3f937d7aa63c2af8a3af2a9e0fda2e16ed39" origin="Generated by Gradle"/>
             <sha512 value="da655cf18b960f96d45c1435052615b0bbe31e956033b2a3214193aabc99ad420adb6112df8a196060704daafdab3cb2714ead70b54c3475b9d4e75e4cbbfdac" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.eed3si9n.jarjar" name="jarjar" version="1.16.0">
          <artifact name="jarjar-1.16.0.jar">
             <pgp value="EA313384CA0EBA950EA017E937890E298D9A2BFA"/>
+            <sha256 value="f87922016cadbd7b71cc2d7d10460ec5b23673ae1e7a9c8fc1eb116910397ad2" origin="Generated by Gradle"/>
             <sha512 value="821453cbf6ef941ae53b7afa3babca61381beba377e581ed5d504894f76d4175ab54855ef166957dd216418f27ce948867e9763a9f5b16bbbe4b4e64b9ba39f0" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.ethlo.time" name="itu" version="1.14.0">
          <artifact name="itu-1.14.0.jar">
             <pgp value="B18679A17A21DE79FF9DE8B0636D10E7975B6E6F"/>
+            <sha256 value="5cf40ab0cc77828ab2b875b1f3ecd71c8295d7721933476abc2e08fddcea164a" origin="Generated by Gradle"/>
             <sha512 value="aa69a6af3a7123eb41425bbaf6834e16dc3323172709e2338b8a21b970fd21333d996515f42da4aa0225251e30542ad7d9c8332bdf7d62ed96b42fadc8a1520d" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="com.fasterxml.jackson.core" name="jackson-annotations" version="2.21">
          <artifact name="jackson-annotations-2.21.jar">
+            <sha256 value="53ca085f4a150f703f49e1aabd935bd03b43e1ea3d55d135438292af22cef56b" origin="Generated by Gradle"/>
             <sha512 value="d832a99867acc2d5afb2596da760c50e6a6b54c1bbc8e6c4186f267a16e1d55c7a916ef8b034ad6b277c41e3342b91dcdc2e3dcea8bdccfe89e7c147894591be" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -361,34 +375,77 @@
             <sha512 value="31a16a40b2e1a1a9467a66c93884c034527fb5af641a79bd6a563d4c3aaa0cfc8d8250f930d13c7fd70c18db579940ec54a49538c5a2e0fb9780c575808000ff" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="com.fasterxml.jackson.core" name="jackson-core" version="2.21.3">
+         <artifact name="jackson-core-2.21.3.jar">
+            <sha256 value="baf8b739e9d9b93bcdb33f25046bfdb8dbd74c97de2a8698539fbe0c7eeac0bb" origin="Generated by Gradle"/>
+            <sha512 value="3b1140a023f12df08e891aa1d623d01c79d1932d310cc90907603103abf1d5b1b288eba45c45a3fd292f44642d042c541ec50a17be4c6c8ec6a2e6cc6a1644d6" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="com.fasterxml.jackson.core" name="jackson-databind" version="2.21.2">
          <artifact name="jackson-databind-2.21.2.jar">
             <sha512 value="1a47b012447bc8c3d0bc603b95fce1640d7fe7ead08bc33c106c0de811f061a1eda871863e4e1411e9c0c9c716d47c69960f7e492f54e8610f3e40c99f5c3962" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="com.fasterxml.jackson.core" name="jackson-databind" version="2.21.3">
+         <artifact name="jackson-databind-2.21.3.jar">
+            <sha256 value="f397563d8e67630c10cab8c2334ca0e55af832fa3ebde160a379c2c96d43bf25" origin="Generated by Gradle"/>
+            <sha512 value="bf9df0232bd26b6f00b2227fad26cee40ef31e8e12e521ee1afe89dcea61ddb2b27cbc0d1f0679d1746cc35cc361e531c84324db68d43eaa60f15933bbbcf0ab" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="com.fasterxml.jackson.dataformat" name="jackson-dataformat-csv" version="2.21.2">
          <artifact name="jackson-dataformat-csv-2.21.2.jar">
             <sha512 value="93e80b6bc1b4410bed9d5ecac305a1dfc55808f5fdf840ca8d74912f17b6cbb29d8d871a4d975bc905010334dfc95e0f96175d2434b2765fe4cd4a0f7ff7964f" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="com.fasterxml.jackson.dataformat" name="jackson-dataformat-csv" version="2.21.3">
+         <artifact name="jackson-dataformat-csv-2.21.3.jar">
+            <sha256 value="34e41d97c3d5e1ccafcfa806ae6f3d9adc4ff1565e48a60a8a6ead1c74b46ecb" origin="Generated by Gradle"/>
+            <sha512 value="aed34196d3752d7dac527c9d3655b9fabb80873000c88bc46f84637b9b6da1b889d19df0f5a15ac6f29eb34188bd208fe137133316cac5d8aae419a46bdb3ecb" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="com.fasterxml.jackson.dataformat" name="jackson-dataformat-toml" version="2.21.2">
          <artifact name="jackson-dataformat-toml-2.21.2.jar">
             <sha512 value="fce5ecebbd849ecd899de69b6534948ca10b08cf7a2a79ddfae3729ae764a732b7aeb9cbd43408b83072d527162192f57b15c56751fc09e9788c6f17a3cf0b11" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="com.fasterxml.jackson.dataformat" name="jackson-dataformat-toml" version="2.21.3">
+         <artifact name="jackson-dataformat-toml-2.21.3.jar">
+            <sha256 value="ad4f85ab40e0159c8546611f248e6232d8dcc47937ea5fa0ece591dee8fdbcb7" origin="Generated by Gradle"/>
+            <sha512 value="58988b04fce549738b6e3828ad98a3db4cc173bf0753f1790bfeeec3c5533bfd711d6d95d72c7dfe61014e141ca90c04baffead4d7ce7b655aaba4d5e8d6840b" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="com.fasterxml.jackson.dataformat" name="jackson-dataformat-xml" version="2.21.2">
          <artifact name="jackson-dataformat-xml-2.21.2.jar">
             <sha512 value="319f1e9659996c275a31853f03812e2507d7246f0cecd7e78798f9166a767040bb6ca1f729e4ae4ab4e1bd0ade647d56fddae52dadf8a858e23fb639fca06559" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="com.fasterxml.jackson.dataformat" name="jackson-dataformat-xml" version="2.21.3">
+         <artifact name="jackson-dataformat-xml-2.21.3.jar">
+            <sha256 value="a434f465462c7c5f471e965f4a7d1eaddee957cbf674f8f2c578ab2295f8939d" origin="Generated by Gradle"/>
+            <sha512 value="4401ef078cb23d300dc7d9b467f17165b7c12a9b968f626e1d54892863e5ed0fb989dfdb167959971c898bfebd8af356df7594199673a610cfba8410bd420348" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="com.fasterxml.jackson.dataformat" name="jackson-dataformat-yaml" version="2.21.2">
          <artifact name="jackson-dataformat-yaml-2.21.2.jar">
             <sha512 value="b9c01e5219dd055771144633fc5f9fa3dfec96b19e8cd2920d5c80ee6ccf6b378e45d7387814d793cd4cfca24f2d19d5dbf236bf204f03e4c9109edca475a97e" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="com.fasterxml.jackson.dataformat" name="jackson-dataformat-yaml" version="2.21.3">
+         <artifact name="jackson-dataformat-yaml-2.21.3.jar">
+            <sha256 value="f0aa297d46f9364af8b3617f8f16ee3d687bc11a8b20ea6266590a21e021c3a4" origin="Generated by Gradle"/>
+            <sha512 value="7cabeadc6d1026f147c50c58747f8467705bfaba1b3f882d859dfe8d81ada2e1803613a8c15abf5d11db4b4877c1892f697d0e5ec957fa2857c8c8df4e418dc6" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
+      <component group="com.fasterxml.jackson.datatype" name="jackson-datatype-jsr310" version="2.21.3">
+         <artifact name="jackson-datatype-jsr310-2.21.3.jar">
+            <sha256 value="c6f721d6ea16f5557567a476069f7c08c598ff8f02766f229b45fe1e87139a20" origin="Generated by Gradle"/>
+            <sha512 value="b8f37ae5fed1516dcc0ea2e8b7ab8d1a46b9348cc5edbb047c253c7efec16be283ad45734104634d932c3d1377e9cfad6d2933573825699f2bddc03d605197b8" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="com.fasterxml.woodstox" name="woodstox-core" version="7.1.1">
          <artifact name="woodstox-core-7.1.1.jar">
             <pgp value="28118C070CB22A0175A2E8D43D12CA2AC19F3181"/>
+            <sha256 value="02b9d022e9d47704ff8a7a859a0dbfd3b2882a8311eb7ff1e180f760ccda2712" origin="Generated by Gradle"/>
             <sha512 value="28105d6409766966123d4e212dba555c4776bfeb538093d3739ef113de5c6d6e92453aabc16915bfb76124a5dcc82b57f3cd13b42ea2e4038a4495285c642d3a" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
@@ -399,6 +456,7 @@
       </component>
       <component group="com.formdev" name="flatlaf" version="3.7.1">
          <artifact name="flatlaf-3.7.1.jar">
+            <sha256 value="11f498f3c89596a782fceaa727c853a665067aeabc09bd682dc53b3ef237d0c7" origin="Generated by Gradle"/>
             <sha512 value="071255f81458c76fcb5c213c1c523a607d3d96ca6eed0a774ea0097e5a25849c705a9063e3a91417846c003ddfaf8e12609221d0190baaa1cbc114bd4fd39561" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -409,6 +467,7 @@
       </component>
       <component group="com.formdev" name="flatlaf-extras" version="3.7.1">
          <artifact name="flatlaf-extras-3.7.1.jar">
+            <sha256 value="3a1687e7ad23c78418cc0837ed9a0bbfc16b69bd7d3dfec12b4df6d4dac27b2a" origin="Generated by Gradle"/>
             <sha512 value="07f0fdbd34f379bf3864fe1c2c033287a4f9b1b70cd47671b293774d18eb968cf0eb5e7c116b6085020618dcdc9671ad665c42c12ec5f6c9ecc52817ff53e4a2" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -419,6 +478,7 @@
       </component>
       <component group="com.github.ben-manes" name="gradle-versions-plugin" version="0.54.0">
          <artifact name="gradle-versions-plugin-0.54.0.jar">
+            <sha256 value="1b02b5e7fab2dc052ae2f94753ee6db1ecda42813f7571b2729a9445b44ea5d5" origin="Generated by Gradle"/>
             <sha512 value="193dac94efd25201f3a01d30167e43c2b74929cbd33d8796c3018745b16a5b2138616da913c65a596837871b5550c15ed82c7b17088a304a88b3d9bb81e5409e" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
@@ -428,6 +488,12 @@
             <sha512 value="eb18fcab77340d9a4eb2b3412f2682728b72d4f8e3f0d221ca65430c95342ddc4d7e5a9743bb2975c9206ca975481b23e8a3f180bcd4a3bb4afbcd7fc4a3c0a6" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
+      <component group="com.github.javaparser" name="javaparser-core" version="3.28.1">
+         <artifact name="javaparser-core-3.28.1.jar">
+            <sha256 value="113742383cca4a46931008a961fbea54b2aa3a49ce8f0c54110930eac65f1876" origin="Generated by Gradle"/>
+            <sha512 value="8b5d1962ea5421f434f62e073439f05ec47953e5e7085492833768f350f5222ad6600880ef44078424da83d2c1b9ca324fd57a3f068704977f3d48ad0f99d2c8" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="com.github.jk1" name="gradle-license-report" version="2.9">
          <artifact name="gradle-license-report-2.9.jar">
             <sha512 value="96c89afe7f3904ad106ffd4b42103e752a51c00945cbe8bf43a2fc1288807c69da280f9b3621231b477500f4149cbfded3e3ebd0c13a875beafc4834876b0fc8" origin="Generated by Gradle" reason="Artifact is not signed"/>
@@ -435,24 +501,29 @@
       </component>
       <component group="com.github.jk1" name="gradle-license-report" version="3.1.2">
          <artifact name="gradle-license-report-3.1.2.jar">
+            <sha256 value="bac61b9608da0d10d14be747927509d71923c505cb16e9c805ab51e7782fda38" origin="Generated by Gradle"/>
             <sha512 value="a9f33f620a13f95b7a8e5e441cbcf49413a9ecfdba526e9dd6d65adcfe5b582522881be164e3536079b9cb9b2beda0b8d71e1403b7d1f69167c3c96523620d4a" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="com.github.jnr" name="jffi" version="1.3.13">
          <artifact name="jffi-1.3.13-native.jar">
+            <sha256 value="a38dd049951a27f7a423389fecf0195a5bd414f418e90f5ac9992652c22a5b8e" origin="Generated by Gradle"/>
             <sha512 value="8de5157c314d99bac10c9b1d9ea15762ec49a38e25af765d43c42d50c78e34d1238bdce137832a49e735e5a20a07fda4a5d488049b15445c60b6bdd417115cc6" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
          <artifact name="jffi-1.3.13.jar">
+            <sha256 value="78df5fb05d7e2541b867bedc538b18840245a601bb2160fa26824bb67ed93878" origin="Generated by Gradle"/>
             <sha512 value="1af68694bcead74cedce28c1ffd6efd3c96b733830433450605e251d01150d41e7396a6d3b85cfee1d616aeb433425c8c0c64493318908fc252b63159a14ee76" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.github.jnr" name="jnr-a64asm" version="1.0.0">
          <artifact name="jnr-a64asm-1.0.0.jar">
+            <sha256 value="53ae5ea7fa5c284e8279aa348e7b9de4548b0cae10bfd058fa217c791875e4cf" origin="Generated by Gradle"/>
             <sha512 value="922bdf2883c6a9cd6491289020d404ab151fd9ffa78d2ec884a2ac3af739d397016f1f4596c3e6c58744ea600fdbc2d330c8f520a1a9ab0eef6af6b667b35b89" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.github.jnr" name="jnr-constants" version="0.10.4">
          <artifact name="jnr-constants-0.10.4.jar">
+            <sha256 value="9a5b8cf9798d9d0331b8d8966c5235a22c4307676e35803a24659e6d76096f78" origin="Generated by Gradle"/>
             <sha512 value="608b2c53914aeb3fb36e2fb81a948e5dbec835a9d220d50a4bb9693d4a534414d1bc4c5e5582b196793317fb64fe7617d78d5ec974e6413732940e141201fdba" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -463,6 +534,7 @@
       </component>
       <component group="com.github.jnr" name="jnr-enxio" version="0.32.18">
          <artifact name="jnr-enxio-0.32.18.jar">
+            <sha256 value="0dfde0b64e92429b1a20e54ee77fca606c4f458a5efe54b461884dd0a1e823a3" origin="Generated by Gradle"/>
             <sha512 value="9dcc59ff72b1f9f397feda7690ae648fe7bdf64eb608aa4a8bf5f48354285652e70617dab72973e84dd0a8b9f8c2bb64625ff8299ee277478272dfebb97ef1f6" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -473,11 +545,13 @@
       </component>
       <component group="com.github.jnr" name="jnr-ffi" version="2.2.17">
          <artifact name="jnr-ffi-2.2.17.jar">
+            <sha256 value="37b494600b956a7932e799d4a7284bbf1ad0b0b23b4df62d0c01f55f1d3ee681" origin="Generated by Gradle"/>
             <sha512 value="43aeb2c08f92045d44d852f4cfc31f9094134e856f5bd27e8d1625704395e338371a889061ea0aef8a4303dad4320987904eb9c3f313fe97aef65fe3ac97fc3e" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.github.jnr" name="jnr-netdb" version="1.2.0">
          <artifact name="jnr-netdb-1.2.0.jar">
+            <sha256 value="24f54abd859979b6caabf4918b022c57fc0d3247def4bfe68e5a30172409fc3c" origin="Generated by Gradle"/>
             <sha512 value="dfb143b2a3962bcdb7775d79a501aa93c2e8b7322a4ea3b29e976f6b1701ec93824cfb1ca7b564498ee56e664c18ea09cfd4123ac335058b90502c517f05f5d9" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -488,6 +562,7 @@
       </component>
       <component group="com.github.jnr" name="jnr-posix" version="3.1.20">
          <artifact name="jnr-posix-3.1.20.jar">
+            <sha256 value="e4f28d47be66a8710950425c037318442af2b8021708de0b7871ff65fab8cd86" origin="Generated by Gradle"/>
             <sha512 value="1bcb26600291a8684825d092d318447fbb56f069adbf8765d3fba208fc90e394e2d792dea0e9ce319bcc09a9a3f35f99678f8c8a3cd03365ddbb23e2545911b0" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -498,24 +573,28 @@
       </component>
       <component group="com.github.jnr" name="jnr-unixsocket" version="0.38.23">
          <artifact name="jnr-unixsocket-0.38.23.jar">
+            <sha256 value="50d273039f9920f567c17a5881fde6a6f7d4b637fb9961b3b7c96dd542e6adc2" origin="Generated by Gradle"/>
             <sha512 value="d2dfbe0e5a5d86d102903af1d55ce1211d2f602d73262f080d3917723a18a673890b0ec8786ee7ae9ac378595cf2ad260ac28495ef6f971f542f4ffe4dc76b43" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.github.jnr" name="jnr-x86asm" version="1.0.2">
          <artifact name="jnr-x86asm-1.0.2.jar">
             <pgp value="0057FBD7F284A1C1B4F1E891EE6E41E5483F557D"/>
+            <sha256 value="39f3675b910e6e9b93825f8284bec9f4ad3044cd20a6f7c8ff9e2f8695ebf21e" origin="Generated by Gradle"/>
             <sha512 value="e928926b01ce545144c1bbf160edee9b923773e32f9a399a71c2ab5e8325d9cbcfb41f41c8f008b80d1beab8da1c4b74845996479c07ed73bc131959911d4762" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.github.package-url" name="packageurl-java" version="1.5.0">
          <artifact name="packageurl-java-1.5.0.jar">
             <pgp value="5D283C23D9D9DC2D9C2130E6AADF2C18DCF95764"/>
+            <sha256 value="e45551727707acc0c56ac62d56964332ea0f138d6cc3656d988b9369150f5247" origin="Generated by Gradle"/>
             <sha512 value="8064df400154caa110b8845bd17e6cea2683307e575ce88e40d7c0c8965ea0af6c150a376d8b9ba7354676c41b52c94535f30c6e830447613299ccf5fc7aa959" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.github.siom79.japicmp" name="japicmp" version="0.23.1">
          <artifact name="japicmp-0.23.1.jar">
             <pgp value="FFFD810FFFDE203D5FA27263BEABCFBEE059E4E5"/>
+            <sha256 value="b10a17dc1301666afdaba474211eef6a5aac9de064b3d1b88420ba3ac2beca79" origin="Generated by Gradle"/>
             <sha512 value="c330fb16971210d07e0031df2955cb35fc89327ec07a496ba7028336f336ec552d667e3101bb2b9aa292c2dfb8491a290116d8417db7164ea238fa1b4569fbad" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -526,6 +605,7 @@
       </component>
       <component group="com.github.spotbugs" name="spotbugs" version="4.9.8">
          <artifact name="spotbugs-4.9.8.jar">
+            <sha256 value="4469bc080afe7cd2290a20bf63e28392b80abcc7c7ace33c8f55da52a17c7ca5" origin="Generated by Gradle"/>
             <sha512 value="2699f1cc702c30d458e8d22b024d0eb9be6707e6b4281a7fe0d0e90f99402baacb9ab6804582d76433887dd5bd4f8071e6fda0cd203fa94e45c4bb908b7c72b4" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -546,18 +626,21 @@
       </component>
       <component group="com.github.spotbugs" name="spotbugs-annotations" version="4.9.8">
          <artifact name="spotbugs-annotations-4.9.8.jar">
+            <sha256 value="6f69d6fe9c55a54dcb30e87d8fa2d5f52246af50d7a3445246d9539ef221be1c" origin="Generated by Gradle"/>
             <sha512 value="a2dfdd7972db1adc141a845bc8a3fb81325d987dff1237017f58120f7caa6f1be5bdf2ea79bac7fc2db700596e62bb253e2b0762939f72905feb59fd6e29eaeb" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="com.github.spotbugs.snom" name="spotbugs-gradle-plugin" version="6.4.2">
          <artifact name="spotbugs-gradle-plugin-6.4.2.jar">
             <pgp value="D878D4A823EAE731B729D1A8D2151178A123C97F"/>
+            <sha256 value="7d30b3bcb7027e553d314f63c2ba2ed7fe94fe1b4d14d4f8071f788b7b538695" origin="Generated by Gradle"/>
             <sha512 value="a8155c95c1f14d0ba8a4a74d8208f4508d3fd8dbc29cfc09220e991fe5cc3f5e75327ce8c368c43714a4a0ec1186a0d9283892e9e3a82b12a3101c88534eab32" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="com.github.stephenc.jcip" name="jcip-annotations" version="1.0-1">
          <artifact name="jcip-annotations-1.0-1.jar">
             <pgp value="042B29E928995B9DB963C636C7CA19B7B620D787"/>
+            <sha256 value="4fccff8382aafc589962c4edb262f6aa595e34f1e11e61057d1c6a96e8fc7323" origin="Generated by Gradle"/>
             <sha512 value="02fcd16a30d0e68b3e9e4899731181c6abb7117baa15c096ca940e01dde08bb86101cbeae552c497f8a90d923b5fa2f2b6f3850baf8dc94dbd399887924a9069" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -568,12 +651,14 @@
       </component>
       <component group="com.github.weisj" name="jsvg" version="2.0.0">
          <artifact name="jsvg-2.0.0.jar">
+            <sha256 value="81fc9ada579fc3f4924ec35f904c043de13ee8fba280322e638c7092006f1b52" origin="Generated by Gradle"/>
             <sha512 value="6896c38f5006b58c5a3021022efe9ed7d5c60722b405aea3000d041cc109e000ba27a81240ebe55ccf261f6030f4e48a76154161cc3b17fec667aae501a443f4" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.google.code.findbugs" name="jsr305" version="3.0.2">
          <artifact name="jsr305-3.0.2.jar">
             <pgp value="7616EB882DAF57A11477AAF559A252FB1199D873"/>
+            <sha256 value="766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7" origin="Generated by Gradle"/>
             <sha512 value="bb09db62919a50fa5b55906013be6ca4fc7acb2e87455fac5eaf9ede2e41ce8bbafc0e5a385a561264ea4cd71bbbd3ef5a45e02d63277a201d06a0ae1636f804" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
@@ -586,6 +671,7 @@
       <component group="com.google.code.gson" name="gson" version="2.13.2">
          <artifact name="gson-2.13.2.jar">
             <pgp value="C7BE5BCC9FEC15518CFDA882B0F3710FA64900E7"/>
+            <sha256 value="dd0ce1b55a3ed2080cb70f9c655850cda86c206862310009dcb5e5c95265a5e0" origin="Generated by Gradle"/>
             <sha512 value="4c13440cd080c13a160a13a8f350816487b3c2a77aed8ea900721af07a595f6b2f414ac5fb6a628011e9d366a5c4c3c5633f5efa669700144b659dfe4d14419b" origin="Generated by Gradle" reason="A key couldn't be downloaded">
                <also-trust value="8974a052656d2e5ec968b6bac2edf51413ffc62040fdc65f14f00597e738ab544d22487f8579ba90618b5a7f94ef33773510fac67b408fee6ed274b38f3d9947"/>
             </sha512>
@@ -593,6 +679,7 @@
       </component>
       <component group="com.google.code.gson" name="gson" version="2.14.0">
          <artifact name="gson-2.14.0.jar">
+            <sha256 value="2cbd119bf1961c28788310963dc80ba65f58cdeec1dd139c8bdb1240faa2c36f" origin="Generated by Gradle"/>
             <sha512 value="d040d19a47ca2df33365493f9813a1d0a40b91685f7d87ca445b98d37b4c1b801314aef87940dc8b43dd1b0b96f6d5e6e4296778bf1af8dbfb1091425b37da21" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -613,16 +700,19 @@
       </component>
       <component group="com.google.errorprone" name="error_prone_annotations" version="2.38.0">
          <artifact name="error_prone_annotations-2.38.0.jar">
+            <sha256 value="6661d5335090a5fc61dd869d2095bc6c1e2156e3aa47a6e4ababdf64c99a7889" origin="Generated by Gradle"/>
             <sha512 value="b13fdb7e06ec1f12ea1d63b0ff942c239e4decb391d736a1f7d46c9aa9e2744e9391be4398a02a78d551a96969622e65b75bbd31e5bf67a5938716765f451f3a" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.google.errorprone" name="error_prone_annotations" version="2.41.0">
          <artifact name="error_prone_annotations-2.41.0.jar">
+            <sha256 value="a56e782b5b50811ac204073a355a21d915a2107fce13ec711331ad036f660fcc" origin="Generated by Gradle"/>
             <sha512 value="e2eb4bf9f36f95a4d4c5ea344db5cd90a456e63bef8e52932b8f6f4ecfdd59cb2f6c2ce9e67b0070c82177e42885688b95afef591b16001f789b378f18afdf30" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.google.errorprone" name="error_prone_annotations" version="2.48.0">
          <artifact name="error_prone_annotations-2.48.0.jar">
+            <sha256 value="b49c5c958316ed67a09c699dda9aa749caf434d51d863dea599ef36a49b9c855" origin="Generated by Gradle"/>
             <sha512 value="1692b210d2b4c1d446da1d86ee787be1c3be56ee8c5f4274f20ef126b57c444a403464df7b9dfdf10bccbe7e0432247ecffe615fbc30d16be7a3282cb2556d34" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -638,6 +728,7 @@
       </component>
       <component group="com.google.guava" name="failureaccess" version="1.0.3">
          <artifact name="failureaccess-1.0.3.jar">
+            <sha256 value="cbfc3906b19b8f55dd7cfd6dfe0aa4532e834250d7f080bd8d211a3e246b59cb" origin="Generated by Gradle"/>
             <sha512 value="72be228e7805da5623e42bf024ded7d9147023c66b22f4dbd04ac6898201af46ee82e1f92ea51eb0595f1b49151c4b8ecb862653d4906c17609c42544ee97abf" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
@@ -653,11 +744,13 @@
       </component>
       <component group="com.google.guava" name="guava" version="33.5.0-jre">
          <artifact name="guava-33.5.0-jre.jar">
+            <sha256 value="1e301f0c52ac248b0b14fdc3d12283c77252d4d6f48521d572e7d8c4c2cc4ac7" origin="Generated by Gradle"/>
             <sha512 value="994a4dbcbd8e528ad3b4a7acf49b631a40dcebb03d9a8f5e1d3b74351f805f77774e9a19f7233e42036cb415b7838710f207ac1e18335e4a219b7f99ea22a44f" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="com.google.guava" name="listenablefuture" version="9999.0-empty-to-avoid-conflict-with-guava">
          <artifact name="listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar">
+            <sha256 value="b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99" origin="Generated by Gradle"/>
             <sha512 value="c5987a979174cbacae2e78b319f080420cc71bcdbcf7893745731eeb93c23ed13bff8d4599441f373f3a246023d33df03e882de3015ee932a74a774afdd0782f" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
@@ -668,6 +761,7 @@
       </component>
       <component group="com.google.inject" name="guice" version="5.1.0">
          <artifact name="guice-5.1.0-classes.jar">
+            <sha256 value="142ad4475e19524d2fe3ac995b3f7cbc962fc726f2edb9dbdccc61feab9b2bf9" origin="Generated by Gradle"/>
             <sha512 value="5b566b015aa3c8c094a0d81a30b3c9b4ff546aafca416bcc8e70a205ba148c61086cb4c168d4fe158b3d0403ce35ef46c38b04b4d977c94a510b5c6687808208" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
          <artifact name="guice-5.1.0.jar">
@@ -695,6 +789,7 @@
       <component group="com.google.j2objc" name="j2objc-annotations" version="3.1">
          <artifact name="j2objc-annotations-3.1.jar">
             <pgp value="C3259D20DAEC4ACE6D57CC83340B090F727518D8"/>
+            <sha256 value="84d3a150518485f8140ea99b8a985656749629f6433c92b80c75b36aba3b099b" origin="Generated by Gradle"/>
             <sha512 value="34ee5aad57b0b507e89c897306f73043f80fa0eb02b453e54d9052feb0808a0d2ed835d888946211921d2bf733780b19ff636479ce19b9f48814ba6008733ce1" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
@@ -705,6 +800,7 @@
       </component>
       <component group="com.gradle" name="common-custom-user-data-gradle-plugin" version="2.4.0">
          <artifact name="common-custom-user-data-gradle-plugin-2.4.0.jar">
+            <sha256 value="979bc55731e1a1aa71879366b16153f72b5122f918831aa39a8030958c1fe126" origin="Generated by Gradle"/>
             <sha512 value="1d3568352f7007377d577b2803f41793568daf681589bfe83db3c12f7a9782c7316e388fa2a1c2853771be8a7062a135db72d0d29b2be75769f1cf98f7f36427" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -718,6 +814,12 @@
             <sha512 value="e8995ff1332e3d52a33117f84c83b1e4bab1506817f8ef6f68945ca1aa265fdc325e5cfd7a7fcd500a899456d258820c046db48ed4b9853c3ceec89bca3ec9db" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="com.gradle" name="develocity-gradle-plugin" version="4.4.1">
+         <artifact name="develocity-gradle-plugin-4.4.1.jar">
+            <sha256 value="f57c98bb73144b9d4f0f7ce2acb24033c57b454c447a4ae1feaca4e09c644a97" origin="Generated by Gradle"/>
+            <sha512 value="f2676018462dbc5e885be4e30a820501ad84dd7a3a0c17f2bb1343775c971fb3bf9756a680d75af5e2ca82e89b6c6593ab7a005c659fc76e3d0bbf93155dbea7" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="com.h3xstream.findsecbugs" name="findsecbugs-plugin" version="1.13.0">
          <artifact name="findsecbugs-plugin-1.13.0.jar">
             <pgp value="CFC10B69382CBCF5387E51484ECE492B63E38ACF"/>
@@ -726,22 +828,26 @@
       <component group="com.h3xstream.findsecbugs" name="findsecbugs-plugin" version="1.14.0">
          <artifact name="findsecbugs-plugin-1.14.0.jar">
             <pgp value="CFC10B69382CBCF5387E51484ECE492B63E38ACF"/>
+            <sha256 value="6fa340344fa433ff46c2985dab1010e8bc739f9395c983594a5240095e92abc8" origin="Generated by Gradle"/>
             <sha512 value="9eb87ea65584d6ab9e79cfcc9a2ffe3519adab9356084c74aaead8b3c7ca1e025ae2c2ba1aa70fab701fcd2f960e044ab467da6199d3a7feb64da5db42bc7991" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.headius" name="backport9" version="1.13">
          <artifact name="backport9-1.13.jar">
+            <sha256 value="89dccb0f38901d9d15280c55d3a435bb7867d93756b17a2bf99f505daf9f9a1f" origin="Generated by Gradle"/>
             <sha512 value="3539ace527e6112114d9c1427cbb46aa564927ef3bcb1c96123edb900b8aebafdd038cb67b7f9931c579ab9816cf81e378ceaeae6921562b2b33ea5fbec0e38a" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.headius" name="invokebinder" version="1.13">
          <artifact name="invokebinder-1.13.jar">
+            <sha256 value="c6a4406f7aae8d016b2cc3206adba08a6d5b845868c556d6e5b3e43fe205741a" origin="Generated by Gradle"/>
             <sha512 value="d0278a8d847ce198531009af40543fb544db945a89359d6431c6bc3ea7a44962e223ad7a750814b0c1832470f6e7797e4882f671f31eda1c34de2f4b373b153e" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.headius" name="options" version="1.6">
          <artifact name="options-1.6.jar">
             <pgp value="8446B9E902A3F3DDEE711FDB8E26FF248BC7AEAD"/>
+            <sha256 value="c4c52c7931c945792d48c6010596195359a35a82d6ac36c645f14705b9a277db" origin="Generated by Gradle"/>
             <sha512 value="a4b32d835fc28a58783d07f99b213aa559b54bef8c994cea08dd95e522f48c8b91970f09f1919a999c4023f3fae46e10ab155b80a2dba2bc7212dacd9f7e5109" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -752,44 +858,52 @@
       </component>
       <component group="com.jcraft" name="jsch" version="0.1.42">
          <artifact name="jsch-0.1.42.jar">
+            <sha256 value="74297550aecc3b566ee19e49befb9cd49e2326c9d8d71ad5071bacc655b760dc" origin="Generated by Gradle"/>
             <sha512 value="900f9f14bbad4c4140dace31527134f831cf73c0315445dad20a5c3e49f23910a2871dc39a58a315cf5a4581a19333bdb19d97da7902861672315270425a00bd" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="com.jcraft" name="jsch" version="0.1.55">
          <artifact name="jsch-0.1.55.jar">
+            <sha256 value="d492b15a6d2ea3f1cc39c422c953c40c12289073dbe8360d98c0f6f9ec74fc44" origin="Generated by Gradle"/>
             <sha512 value="b6827d8de471682fd11744080663aea77612a03774e2ebcc3357c7c493d5df50d4ec9c8d52c4fcc928bdfdd75b62b40d3c60f184da8a7b8aba44c92afecee7a5" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="com.networknt" name="json-schema-validator" version="1.5.9">
          <artifact name="json-schema-validator-1.5.9.jar">
             <pgp value="AEB1E1AEC035C66FA39589D13EFC46EE83C40224"/>
+            <sha256 value="e0b8baeb78fd1ba027454ee3974d8a02f54447eaa510d3052820a7d2160d9ae4" origin="Generated by Gradle"/>
             <sha512 value="5ba210c135717a6ed043e0889d96f6381b3668f9e2a011bd0def8138ad327813f792259858ae5ed192cb8ec0645308113769aa8ebee903db1ccd82e98cb3009d" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.puppycrawl.tools" name="checkstyle" version="12.3.1">
          <artifact name="checkstyle-12.3.1.jar">
             <pgp value="06D34ED6FF73DE368A772A781063FE98BCECB758"/>
+            <sha256 value="10794e86ad0c37d17867e82bd796fa3ccaeb2e7dd14d8ccb0053dab63888c934" origin="Generated by Gradle"/>
             <sha512 value="945f9bc646ffeda72cc3bdc28f229e26eac63b2c127a14b724d501701c61211f538122d0924c0d31df6c266f374abb791045b749d02a54005903b8771ad900a5" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.shapesecurity" name="salvation2" version="3.0.1">
          <artifact name="salvation2-3.0.1.jar">
+            <sha256 value="a1a0f5238a07f246c9e206725f697e5623e93b729d8fd8b148fc627bf9a27c07" origin="Generated by Gradle"/>
             <sha512 value="c6a6039dc4e2f35a9e576f8fb7a66427fa46e9bf87d0b14117796cd3dc87aa184c2f0dc394dc85d913abfa122c0253306e3e72c97613af902852e161369543c4" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.sleepycat" name="je" version="18.3.12">
          <artifact name="je-18.3.12.jar">
             <pgp value="E6A04C98C11CA6FD765BE838156E8DA37ABC7C91"/>
+            <sha256 value="0a42bb7d53c0cfa7e445eb57bc2bf74fedbb8d22d7216a12dafa2a3aefe5c73e" origin="Generated by Gradle"/>
             <sha512 value="cead82e35e8fa24a6ad6dfffe33d36542a3395b9c4615bbc34e47b696b20d0dfad7f1f34d0ad4aa0fe7ac2681a5c39382b416c6bd7bf4f9d41962ad24224d694" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.squareup.moshi" name="moshi" version="1.12.0">
          <artifact name="moshi-1.12.0.jar">
+            <sha256 value="ee9091e1d1a5926fa9b4df2642c1fb7bb96aec08639b6219c19e0b8724d42475" origin="Generated by Gradle"/>
             <sha512 value="b534a18e3e9ab01fb4bf02a750c25759a9fed1b86ef8701c1508c8650b686b2d80be3333cdade09044f516ee12cc19719d250bd7f15eb66d2e3f724aa77804cf" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.squareup.moshi" name="moshi-kotlin" version="1.12.0">
          <artifact name="moshi-kotlin-1.12.0.jar">
+            <sha256 value="1c436c07c159cd1af032bb79351a48a98e7f781ac807cff8b5711a999b5666df" origin="Generated by Gradle"/>
             <sha512 value="8274888bb124316940c156b399e12bee2e7cbe5f17c7b1dd0870b4601846d9b8f4eefd98e66be2a14b1ae7a3a356a929e3826d363880509987ed5d8ed71385e6" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -800,6 +914,7 @@
       </component>
       <component group="com.squareup.okhttp3" name="okhttp" version="4.12.0">
          <artifact name="okhttp-4.12.0.jar">
+            <sha256 value="b1050081b14bb7a3a7e55a4d3ef01b5dcfabc453b4573a4fc019767191d5f4e0" origin="Generated by Gradle"/>
             <sha512 value="da63f77c1cae377b40f6fd00cfbbe8177e760e4e622ae2c66860fffd3bbbdf605c8e8e415762e9263445b2289ee834100237c63949f2e01c30b6704315dd8f7b" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -810,38 +925,45 @@
       </component>
       <component group="com.squareup.okio" name="okio-jvm" version="3.6.0">
          <artifact name="okio-jvm-3.6.0.jar">
+            <sha256 value="67543f0736fc422ae927ed0e504b98bc5e269fda0d3500579337cb713da28412" origin="Generated by Gradle"/>
             <sha512 value="a592e93651fb5e335212bb25c1cf474c1b1076eda68d53cbdc82c383cbdd60114a62b698ca92a3b4b5e416d637a70f2ddabbf8a05551c62d59a240c3e3c3d2c6" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.sun.activation" name="jakarta.activation" version="1.2.1">
          <artifact name="jakarta.activation-1.2.1.jar">
             <pgp value="6DD3B8C64EF75253BEB2C53AD908A43FB7EC07AC"/>
+            <sha256 value="d84d4ba8b55cdb7fdcbb885e6939386367433f56f5ab8cfdc302a7c3587fa92b" origin="Generated by Gradle"/>
             <sha512 value="56243d42d0b4579ae8dcebb3bb9c0807d54f68e37af1a43c1379d9878fda8cf2d39f4fdfacb480dc1d58bae357c9895da6a19dd5d01b4514b01f2aa9f8701a7c" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="com.sun.istack" name="istack-commons-runtime" version="3.0.8">
          <artifact name="istack-commons-runtime-3.0.8.jar">
+            <sha256 value="4ffabb06be454a05e4398e20c77fa2b6308d4b88dfbef7ca30a76b5b7d5505ef" origin="Generated by Gradle"/>
             <sha512 value="e712166f961cca819a61bd6efc93b93759788d283af73dcc6ed09c0f9c045d7dc2f7fabc0e236b2996fcdebe26e1b2ec5ea45eb4353943dad82ecfef0488305e" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.sun.mail" name="jakarta.mail" version="1.6.7">
          <artifact name="jakarta.mail-1.6.7.jar">
+            <sha256 value="1b258ef45fae93059b65d0a0dd109e59ab93e8cd8a735ff66b2ba85f870d5150" origin="Generated by Gradle"/>
             <sha512 value="3f392a6ae3eada47c37b67d92f3cf39c609a5309fcc97eb271bcf079d0d01f5973c0d32458a875ac1186092a113bb452439f7b7b0edd58a5b3aba5f775e9a001" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.sun.xml.fastinfoset" name="FastInfoset" version="1.2.16">
          <artifact name="FastInfoset-1.2.16.jar">
+            <sha256 value="056f3a1e144409f21ed16afc26805f58e9a21f3fce1543c42d400719d250c511" origin="Generated by Gradle"/>
             <sha512 value="cd57377d61d66ac2ab6ab90483252385fe2bbb9e13dee07913362a64ffe97b16082df981dbe469df3f67ad946827be6f4355d63003a393bda62a0fc8b54a590b" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.thoughtworks.qdox" name="qdox" version="2.2.0">
          <artifact name="qdox-2.2.0.jar">
             <pgp value="7E6557B314B189FD4EA5B680FE66BCA17E67AE6F"/>
+            <sha256 value="c260c3230b2340af97d54bf01f7f67ebc57c901922736c881bb11cb981302be2" origin="Generated by Gradle"/>
             <sha512 value="3fec9532bd0fcbe695ac6c4c3ae54bdd83b35ec031ea81ac853a49d548d6c14bfab92e626545b90564f8424cc22d9c2c682615cf0a461273b60f127184095758" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="com.thoughtworks.xstream" name="xstream" version="1.4.18">
          <artifact name="xstream-1.4.18.jar">
+            <sha256 value="0af1a39b127fb2cae0d13de95cf13aaa4c9a7af525964573d3d278c06c4ececd" origin="Generated by Gradle"/>
             <sha512 value="141c0aa3bd2e0d82cd37e6c2403f09f447aa51344fdf76c2f64b0952b1297ac99156b672628f310b4208d2387f047e62afefead519ba9eee37a7495850814b19" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -853,12 +975,14 @@
       <component group="com.thoughtworks.xstream" name="xstream" version="1.4.21">
          <artifact name="xstream-1.4.21.jar">
             <pgp value="050A37A2E0577F4BAA095B52602EC18D20C4661C"/>
+            <sha256 value="f56586f3de59ae2a49430acbc9f27942b8c5cebec9245c869fae7136733333ec" origin="Generated by Gradle"/>
             <sha512 value="dbaf02229503c9c69198c7f90f361a20d68c6f1a5c6238d298c13bf8c5090b1eba99307c668481a4c7901fe23a7175f6a5218ccf40c45422bc46894f29cc87c5" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="commons-beanutils" name="commons-beanutils" version="1.11.0">
          <artifact name="commons-beanutils-1.11.0.jar">
             <pgp value="2DB4F1EF0FA761ECC4EA935C86FDC7E2A11262CB"/>
+            <sha256 value="9e44ba68ec9a3f21286fa2a8bbb003b735c0f69101bb43144b79f4f8aaa74709" origin="Generated by Gradle"/>
             <sha512 value="4348670579601bc1151de2f27414635c4ea0b4b53061d116c09ba319e2c4f8e91d0cb0713a964668bd5189105ac1e2b6590881850880bf5ff23cc6409f270420" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -879,6 +1003,7 @@
       </component>
       <component group="commons-cli" name="commons-cli" version="1.11.0">
          <artifact name="commons-cli-1.11.0.jar">
+            <sha256 value="8f7f8605d68e15bf32db61ec94eac6fdafc51b1bdbe1e0e0802b57d23f387792" origin="Generated by Gradle"/>
             <sha512 value="79bad27f1ae2affde9a303850b23ea76278437cf13b309addaf06d77d1f9fc1866d1e5f94f90ff82c82ed096dcb65ca187268d95e1695893b3802366fa2c987b" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -890,6 +1015,7 @@
       <component group="commons-codec" name="commons-codec" version="1.15">
          <artifact name="commons-codec-1.15.jar">
             <pgp value="BC87A3FD0A54480F0BADBEBD21939FF0CA2A6567"/>
+            <sha256 value="b3e9f6d63a790109bf0d056611fbed1cf69055826defeb9894a71369d246ed63" origin="Generated by Gradle"/>
             <sha512 value="da30a716770795fce390e4dd340a8b728f220c6572383ffef55bd5839655d5611fcc06128b2144f6cdcb36f53072a12ec80b04afee787665e7ad0b6e888a6787" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -912,6 +1038,7 @@
       <component group="commons-codec" name="commons-codec" version="1.20.0">
          <artifact name="commons-codec-1.20.0.jar">
             <pgp value="2DB4F1EF0FA761ECC4EA935C86FDC7E2A11262CB"/>
+            <sha256 value="6af66595f9f6a7bb58ce66518d6888d40b547c366d2262f06676eee19528ff66" origin="Generated by Gradle"/>
             <sha512 value="6a71738f99031685050aadf8579a6ff67ae5fa5b779d7f35e6b9fffcdd524c29ce6d9ba055f2a88b481e80552ae9e61daf09ae8f467c048afb475a763a643097" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -922,18 +1049,21 @@
       </component>
       <component group="commons-codec" name="commons-codec" version="1.22.0">
          <artifact name="commons-codec-1.22.0.jar">
+            <sha256 value="d164fe79f262c32d9b18a0b5b2d317d1c27653d5e98fd2b998c24bf901c72ce4" origin="Generated by Gradle"/>
             <sha512 value="5b67a5abf63948323101920fec10140d4370b841cc3c522a2b5e9864782640222c3094442861015494ddbc30bb7ef275722a54455c7c8333084842a26d8755da" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="commons-collections" name="commons-collections" version="3.2.2">
          <artifact name="commons-collections-3.2.2.jar">
             <pgp value="0CC641C3A62453AB390066C4A41F13C999945293"/>
+            <sha256 value="eeeae917917144a68a741d4c0dff66aa5c5c5fd85593ff217bced3fc8ca783b8" origin="Generated by Gradle"/>
             <sha512 value="51c72f9aca7726f3c387095e66be85a6df97c74b00a25434b89188c1b8eab6e2b55accf7b9bd412430d22bd09324dec076e300b3d1fa39fccad471f0f2a3da16" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="commons-httpclient" name="commons-httpclient" version="3.1">
          <artifact name="commons-httpclient-3.1.jar">
             <pgp value="0785B3EFF60B1B1BEA94E0BB7C25280EAE63EBE5"/>
+            <sha256 value="dbd4953d013e10e7c1cc3701a3e6ccd8c950c892f08d804fabfac21705930443" origin="Generated by Gradle"/>
             <sha512 value="85e79d4fdb266861910ef95bcd6e82a7f091c9bfbc63dbe2112383ea4d53a5b7a378b54e7c472fbdfde923f30c72d9cad626f8fabb0b9c70d1dfb095add73359" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -954,46 +1084,60 @@
       </component>
       <component group="commons-io" name="commons-io" version="2.20.0">
          <artifact name="commons-io-2.20.0.jar">
+            <sha256 value="df90bba0fe3cb586b7f164e78fe8f8f4da3f2dd5c27fa645f888100ccc25dd72" origin="Generated by Gradle"/>
             <sha512 value="fea08e150473673b0608eaee3ae1cb4e73834039db80d3b758710d6baf3a5840a0878a4eb64739ae9bb21ccc7148c8520fe873616a3f6d5cdb4305deabdd015c" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="commons-io" name="commons-io" version="2.21.0">
+         <artifact name="commons-io-2.21.0.jar">
+            <sha256 value="7d643a2afea8b058b762aa6fb90e5b256f6c729739f8b3784c3370ddc609e88d" origin="Generated by Gradle"/>
+            <sha512 value="7ac1aa4d834cd7cdecaee223a64c63d481810c73dfdb5109f402234a05cadf754e414cead99072f5140d4f7042ee084161935fb28129a631d908d989c5bbac5d" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="commons-io" name="commons-io" version="2.22.0">
          <artifact name="commons-io-2.22.0.jar">
             <pgp value="F4DD59C90148BDC52BEB90A4530AA5F25C25011F"/>
+            <sha256 value="2b9a7b1f726fb86216dbd2c8321eabe0221dbd5b1be81c18e1cb53811b104758" origin="Generated by Gradle"/>
             <sha512 value="fca0b4ae70e531bee74413e0b865981aa8b60a9390f789b63997203dae67be65362e95a0c35b9d4b072fbb0810114783415dd22b92fb42e5594b10992f632bc5" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="commons-lang" name="commons-lang" version="2.6">
          <artifact name="commons-lang-2.6.jar">
             <pgp value="D196A5E3E70732EEB2E5007F1861C322C56014B2"/>
+            <sha256 value="50f11b09f877c294d56f24463f47d28f929cf5044f648661c0f0cfbae9a2f49c" origin="Generated by Gradle"/>
             <sha512 value="4a5a3dbe4941c645e2cca068cca5c1882cfe988b02e7cd981d1e51784900767d1deab0e0e0566f559c9fcabb4a180e436d5bb948902d4f4106f37360466afb42" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="commons-logging" name="commons-logging" version="1.2">
          <artifact name="commons-logging-1.2.jar">
             <pgp value="0CC641C3A62453AB390066C4A41F13C999945293"/>
+            <sha256 value="daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636" origin="Generated by Gradle"/>
             <sha512 value="ed00dbfabd9ae00efa26dd400983601d076fe36408b7d6520084b447e5d1fa527ce65bd6afdcb58506c3a808323d28e88f26cb99c6f5db9ff64f6525ecdfa557" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="commons-net" name="commons-net" version="3.13.0">
          <artifact name="commons-net-3.13.0.jar">
             <pgp value="F4DD59C90148BDC52BEB90A4530AA5F25C25011F"/>
+            <sha256 value="9e88444afadc9467f0bf3d328f93b9538da35a9be05cdee430766e64fddbd6c5" origin="Generated by Gradle"/>
             <sha512 value="cc5e1874a542c250513e031502dd4e099210dba74613ed3a5aa783db453805ec4e5a72dbf9be17263fd04ea27b06b1b5b403dd6f64cda6b0b6610b651d6f9894" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="de.siegmar" name="fastcsv" version="3.7.0">
          <artifact name="fastcsv-3.7.0.jar">
+            <sha256 value="9e1f94bdeb021d18e77750d3eca92daa35cb03ea0f5bd63b078935868a18b206" origin="Generated by Gradle"/>
             <sha512 value="9443d2c8bc8b40bd902512758f6df863e1f98706c9eed7e0b33b4ec6af87aaa43ccd0a97cef5f87af9b5bdbf0f15af1784fb30a327b391bc4c3287201f0371dc" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="dnsjava" name="dnsjava" version="3.6.4">
          <artifact name="dnsjava-3.6.4.jar">
             <pgp value="E06A36F67D8C1BD13F1F278D0CA7139CBC7026F9"/>
+            <sha256 value="39d50d2b5bdee1161978bf85a1b01e95fee490e92bbe98d76d3ceb9642183570" origin="Generated by Gradle"/>
             <sha512 value="6a60c2dec294ba289f00afb5d919e90abea72f79067e4934bee164392f2200b292c3f004f6171ce87a7e869295c6b1a6a7e4a9880bdb1728d7661f18863f9ec8" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="hsqldb" name="hsqldb" version="1.8.0.10">
          <artifact name="hsqldb-1.8.0.10.jar">
+            <sha256 value="b04b3b3ac295d497c87230eeb4f888327a5a15b9c3c1567db202a51d83ac9e41" origin="Generated by Gradle"/>
             <sha512 value="dac86d742a066a40380fc8816477a62e8bb7bde318e1f1ce44ba4b4abe92216f079f0a91a3f3f5918ac27f139c1357356a10c63fe8c348b2bcc58f0c3b8d8b0c" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
@@ -1004,30 +1148,46 @@
       </component>
       <component group="info.picocli" name="picocli" version="4.7.7">
          <artifact name="picocli-4.7.7.jar">
+            <sha256 value="f86e30fffd10d2b13b8caa8d4b237a7ee61f2ffccf5b1941de718b765d235bf8" origin="Generated by Gradle"/>
             <sha512 value="125a8d5cf9dac7f2d67ac82e281d47aab4f15643b4dd5e09199dd5048e385fa74f7f287ebd1162c9f23c488e0d616f1e46591015fe5319c6ad796cc4beddfff6" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="io.github.goooler.osgi" name="legacy-osgi-gradle-plugin" version="0.8.6">
          <artifact name="legacy-osgi-gradle-plugin-0.8.6.jar">
             <pgp value="B2460AF072132DD71CD98A63020BDA623C651E0E"/>
+            <sha256 value="e829a5324aaba5077cfbac4880a1bae50583a5c72e986ddb6126cfd74bcd98ca" origin="Generated by Gradle"/>
             <sha512 value="11ed4f13193c6c3da193b2b620fac442411c10f90b189b2f2a404a1820590e2b58dec88bdce70aee6a68798509d77eb63dabd9b7134935e9fbb91989c4adf733" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
+      <component group="io.github.hakky54" name="ayza" version="10.0.3">
+         <artifact name="ayza-10.0.3.jar">
+            <sha256 value="ac92cede6c4e3a03d17b9e7fb858e39ae10545035cfe83de8d8ef4ce565fae8a" origin="Generated by Gradle"/>
+            <sha512 value="5643bac3ce4582db490c0c78105e05be5c6f7441c8a3dfd4d8f69501eb87fff2f8a610233d6664ef7e000f02e4aa032cef4ae36cbcb1794b362aa1e9aee46866" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="io.github.hakky54" name="sslcontext-kickstart" version="8.3.6">
          <artifact name="sslcontext-kickstart-8.3.6.jar">
             <pgp value="E5138A8E9F2E7E42D38B14D99AEE152CDCCEBFCB"/>
             <sha512 value="19c0ee452fd8de006776c4c3b0606bee7f96ce450a11392bd81f544b76aa648977a4db2a4d4369e9ed936d8a4cb672c2ec92132c732e687de07021f071a22d1c" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
+      <component group="io.github.hakky54" name="sude" version="2.0.2">
+         <artifact name="sude-2.0.2.jar">
+            <sha256 value="f88e3d031dbbd2fea1b98481df0646a25b8d63d92796d6f30f907d5187595b39" origin="Generated by Gradle"/>
+            <sha512 value="4dade9e9536378321d05ec34d4e0fff065385f1cae798a54127ad2c31186e6315d3d0029b07908789fea7318e7b68b442a062adddc9a43f157c2c80ce88e601a" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="io.github.x-stream" name="mxparser" version="1.2.2">
          <artifact name="mxparser-1.2.2.jar">
             <pgp value="050A37A2E0577F4BAA095B52602EC18D20C4661C"/>
+            <sha256 value="aeeee23a3303d811bca8790ea7f25b534314861c03cff36dafdcc2180969eb97" origin="Generated by Gradle"/>
             <sha512 value="c6578e6d5356b9ff6f80ce2fada028387f78b57099e85eba49b4e80f057fd124c338df2193190072e65b71d4f10d749e3890fae11738e5d7350bf44125fb7d7e" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="io.leangen.geantyref" name="geantyref" version="1.3.16">
          <artifact name="geantyref-1.3.16.jar">
             <pgp value="41B962CF9AA2A26FF1F234D2A6144824624A3CBA"/>
+            <sha256 value="7f1d591092d5142b6aaa7cf59f94c4c74d57dbeef03b2f8262949f8f36bac6e3" origin="Generated by Gradle"/>
             <sha512 value="f220e44fe6b61f8dbb61226f832dfb16a09584384540fd48a4dff5c4de9fee060623f85cbead720dfe776aa25105949e70758a9bb1d9db43f63068d8d22164c9" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1040,6 +1200,7 @@
       <component group="io.projectreactor" name="reactor-core" version="3.8.5">
          <artifact name="reactor-core-3.8.5.jar">
             <pgp value="48B086A7D843CFA258E83286928FBF39003C0425"/>
+            <sha256 value="c4a1cc8bce7f5e743ad6b34dcf2ca0b101f4b92d564fe7e006455324be625281" origin="Generated by Gradle"/>
             <sha512 value="00ec8e0cf5559bbc72adb81ded97b69003f2ec81fdd951d684246c7676b0ea5e0930ad894a511ba3aa25da45dbe01a1fceeb4325ae2bebcfa350cb4d1313575d" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1052,12 +1213,14 @@
       <component group="io.reactivex.rxjava3" name="rxjava" version="3.1.12">
          <artifact name="rxjava-3.1.12.jar">
             <pgp value="E9CC3CD1AE59E851E4DB3FA350FFD7487D34B5B9"/>
+            <sha256 value="1808a433ef55dcc2965523e512ab914a5d0d727228a2683ed7559d7cccf44e37" origin="Generated by Gradle"/>
             <sha512 value="6dfd85dee70c88101e79e1e323190342972c66fdd7aa340c602a8e9405bb16a366fe9846b979390b210b172940924899833d149d31b5d9b687c3d022f2c4aa44" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="jakarta.activation" name="jakarta.activation-api" version="1.2.1">
          <artifact name="jakarta.activation-api-1.2.1.jar">
             <pgp value="6DD3B8C64EF75253BEB2C53AD908A43FB7EC07AC"/>
+            <sha256 value="8b0a0f52fa8b05c5431921a063ed866efaa41dadf2e3a7ee3e1961f2b0d9645b" origin="Generated by Gradle"/>
             <sha512 value="c60edc99f119b9e0df0cf527e2512f2b7ab9db0e17c54e83850695f80f652c981eaae90a296db671cf7ed88a044c150224e030df333feb30f346e8a31fb794c6" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -1070,6 +1233,7 @@
       <component group="jakarta.servlet" name="jakarta.servlet-api" version="6.1.0">
          <artifact name="jakarta.servlet-api-6.1.0.jar">
             <pgp value="7464550A61C90BA385FC97A76D9567281201E5E3"/>
+            <sha256 value="8a31f465f3593bf2351531a5c952014eb839da96a605b5825b93dd54714c48c4" origin="Generated by Gradle"/>
             <sha512 value="8651fc14b79e284fe29dff5b2cadbf6748615ececde798c42687472f4f6fd1f80ee05ec53794021c62a11abed0c0170bb08b28d3f9cd7f562eb320bc9870ddec" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1082,12 +1246,14 @@
       <component group="jakarta.servlet.jsp" name="jakarta.servlet.jsp-api" version="4.0.0">
          <artifact name="jakarta.servlet.jsp-api-4.0.0.jar">
             <pgp value="5A022DE16956DECDAD4EBC161FE771E34EF57D42"/>
+            <sha256 value="873b7d0c2b5734ef8847634299b67ce879080cdece8426147522c4db8e37c14e" origin="Generated by Gradle"/>
             <sha512 value="ef2cce7838808082f1de88a99313f4e089ec5a326b44753b4241b04e64272532565443bb2c44abf1099814165b1d00ffd1dda1f0d57cfcac42fc16d8ed8560a4" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="jakarta.xml.bind" name="jakarta.xml.bind-api" version="2.3.2">
          <artifact name="jakarta.xml.bind-api-2.3.2.jar">
             <pgp value="FC411CD3CB7DCB0ABC9801058118B3BCDB1A5000"/>
+            <sha256 value="69156304079bdeed9fc0ae3b39389f19b3cc4ba4443bc80508995394ead742ea" origin="Generated by Gradle"/>
             <sha512 value="5a9a94fc323aecc9c5b28e9ac688aac8d09725d4cae660a57f5698914db91e351283dfe4909a2cc6de803890ac2b3b9f06af9d071d465031e55326a1085a11db" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -1108,28 +1274,34 @@
       </component>
       <component group="javax.inject" name="javax.inject" version="1">
          <artifact name="javax.inject-1.jar">
+            <sha256 value="91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff" origin="Generated by Gradle"/>
             <sha512 value="e126b7ccf3e42fd1984a0beef1004a7269a337c202e59e04e8e2af714280d2f2d8d2ba5e6f59481b8dcd34aaf35c966a688d0b48ec7e96f102c274dc0d3b381e" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="javax.jcr" name="jcr" version="2.0">
          <artifact name="jcr-2.0.jar">
+            <sha256 value="cbf083bc58cb88a0c19112187a4c52d3115f525b5bb7f2913635f5679e6e9743" origin="Generated by Gradle"/>
             <sha512 value="414f1b2d7269b751ddeefc84e1bea08dd1b10e8cc129c2d72ccca4ef0d1e678d58a4346be8bc4ffb9d8551fe96828212cfd0a711fe140dbbfe92a7c2dd947f7e" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="jaxen" name="jaxen" version="2.0.0">
          <artifact name="jaxen-2.0.0.jar">
             <pgp value="CA491704D613780D2BEE00F2C6FC46EB51CF569C"/>
+            <sha256 value="9499e487a66268f47b8307d130cd1e13a58392105e98a51f6a525db79c615cc5" origin="Generated by Gradle"/>
             <sha512 value="dc4d2686c65bfb0c2936e8c0eb4d517152aa284ed28a7880165a4247564823f34e1e9f06785a9dbad7b4cbe90486d3e9aed4c32c75d485d29bd15b8d7642b6f9" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="jline" name="jline" version="2.14.6">
          <artifact name="jline-2.14.6.jar">
             <pgp value="EA23DB1360D9029481E7F2EFECDFEA3CB4493B94"/>
+            <sha256 value="97d1acaac82409be42e622d7a54d3ae9d08517e8aefdea3d2ba9791150c2f02d" origin="Generated by Gradle"/>
+            <sha512 value="27f6e2523e539383cede51d8eae7e97d49038c5a66cb4a94a9ce85165f16e7382b937a238cdb0c92e1136af56c5f57bcc6c04435a370c5d49f7e4bd32f0d9194" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="joda-time" name="joda-time" version="2.12.7">
          <artifact name="joda-time-2.12.7.jar">
             <pgp value="B41089A2DA79B0FA5810252872385FF0AF338D52"/>
+            <sha256 value="385282b005818cfaccdbe8bd2429811e7e641782f2b88932a6b8ff51d668f616" origin="Generated by Gradle"/>
             <sha512 value="755e969a29875bbeea7f9653072e10c24509bb978b07d670d9aaddea147f79832c950035d2353079e23e2930ee394e4b90764ebe59bc9622e17b9927ca79d9d5" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -1140,18 +1312,21 @@
       </component>
       <component group="junit" name="junit" version="3.8.1">
          <artifact name="junit-3.8.1.jar">
+            <sha256 value="b58e459509e190bed737f3592bc1950485322846cf10e78ded1d065153012d70" origin="Generated by Gradle"/>
             <sha512 value="8e6f9fa5eb3ba93a8b1b5a39e01a81c142b33078264dbd0a2030d60dd26735407249a12e66f5cdcab8056e93a5687124fe66e741c233b4c7a06cc8e49f82e98b" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="junit" name="junit" version="4.13.2">
          <artifact name="junit-4.13.2.jar">
             <pgp value="FF6E2C001948C5F2F38B0CC385911F425EC61B51"/>
+            <sha256 value="8e495b634469d64fb8acfa3495a065cbacc8a0fff55ce1e31007be4c16dc57d3" origin="Generated by Gradle"/>
             <sha512 value="a31b9950f929a7e5a600d89787ef40e42a8a8e2392e210d0c0f45b3572937670a18a524f1815508cd1152cd1eaa7275cb7430ba45c053be365c83c231bccd3f0" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="log4j" name="log4j" version="1.2.17">
          <artifact name="log4j-1.2.17.jar">
             <pgp value="9D23533896A9784703585B6286E02C5A42196CA8"/>
+            <sha256 value="1d31696445697720527091754369082a6651bd49781b6005deb94e56753406f9" origin="Generated by Gradle"/>
             <sha512 value="3f12937a69ba60d0f5e86265168d6a0d069ce20d95b99a3ace463987655e7c63053f4d7e36e32f2b53f86992b888ca477bf81253ad04c721896b397f94ee57fc" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -1168,38 +1343,45 @@
       <component group="me.champeau.gradle" name="japicmp-gradle-plugin" version="0.4.6">
          <artifact name="japicmp-gradle-plugin-0.4.6.jar">
             <pgp value="331224E1D7BE883D16E8A685825C06C827AF6B66"/>
+            <sha256 value="039814d14bd3d567cdd80074da6c50a5ec96e50ddff2983e4acaa31eb0ed64fe" origin="Generated by Gradle"/>
             <sha512 value="e15e95d63f2be7909e64ddc0079793ca4bb3f90630b09cb74244c019f607590a9938fa86a1a7d213dcf216e4bc5d1648610efc3c64ad0aca071bd1d133b33048" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="me.champeau.jmh" name="jmh-gradle-plugin" version="0.7.2">
          <artifact name="jmh-gradle-plugin-0.7.2.jar">
+            <sha256 value="d9672099ff8fc3f9bf3d4d015864e1586f07ecbd2a8a177a66184ef0b68aba65" origin="Generated by Gradle"/>
             <sha512 value="e433e221c9167bb937ec0df7626b5bbbe99e08c566a6d54ba7d2e04252dd452b4ca957b57e687f85f958df0ce12678e17d0bcb527e1077770c8b7390ce58f56c" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="me.champeau.openbeans" name="openbeans" version="1.0.2">
          <artifact name="openbeans-1.0.2.jar">
             <pgp value="0191E61ACBBE76323AC15C83B5AD94BDD6BDB924"/>
+            <sha256 value="027e2fe284ff319a6f78a5f07609ed9f7c76bfbac63da2abae133191a65afa83" origin="Generated by Gradle"/>
             <sha512 value="0341d2242dccabe13466fd86d94f75c67be41e078717bd1066d70d4ed6d658b21eb7654e72a502f35c8dbee1c4fc13d146b404ba49bcc8860bbab7cdad703185" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="me.qmx.jitescript" name="jitescript" version="0.4.1">
          <artifact name="jitescript-0.4.1.jar">
             <pgp value="8446B9E902A3F3DDEE711FDB8E26FF248BC7AEAD"/>
+            <sha256 value="035d4afc5a27202c3e3f38c32506e3657697a4d6d97463eb25affe1cbf45efd5" origin="Generated by Gradle"/>
             <sha512 value="638a6633314642dd13df3c0e4d5b9ce45845003c46bf06ecea3b01fe3391bf5c8a1a987ecab5a0608c542a5ec7f1f0ba3f93accc9391b8afd7e1cad3f96403aa" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="me.sunlan" name="antlr4" version="4.13.2.7">
          <artifact name="antlr4-4.13.2.7.jar">
+            <sha256 value="c1c2778e53dc34a79276acadd525923298ebaf231e01e86425a0448e1c9d38d2" origin="Generated by Gradle"/>
             <sha512 value="8a296c27d6f6a7917189cfcdab2f88273c6eed0275a02b39f05e0fe989294ab0d5ba0ff9ac94fdf68a2fab3f495f6a12ec240576b144b5bb39bcdd7cb34ee897" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="me.sunlan" name="antlr4-annotations" version="4.13.2.7">
          <artifact name="antlr4-annotations-4.13.2.7.jar">
+            <sha256 value="df3fd42c042efd5f165336b1a0a4439f13de1bf6597d483c7cf5d080fa4278f0" origin="Generated by Gradle"/>
             <sha512 value="09791c17420747e2b6724b379cbfc995797cd7fec8471c905703d75e867c198bec26ac05b83a363fd43045dca9617026c467f2e7882a0fc682379bad24fad685" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="me.sunlan" name="antlr4-runtime" version="4.13.2.7">
          <artifact name="antlr4-runtime-4.13.2.7.jar">
+            <sha256 value="5d2ee28909ba083be4e81b94044cdfe249a6961f5f1f15dcaa2b3901e99c1fad" origin="Generated by Gradle"/>
             <sha512 value="b28fb4035df136cccd63c7295838f8de2ad0605ad397a16d253c28ca4c194b5ae962fe40bdbfe8c819bff148b18f7f7723200658adfd7393e83674207cc5a1d8" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -1217,42 +1399,50 @@
       <component group="net.java.dev.jna" name="jna" version="5.18.1">
          <artifact name="jna-5.18.1.jar">
             <pgp value="FA7929F83AD44C4590F6CC6815C71C0A4E0B8EDD"/>
+            <sha256 value="260c4b1e22b1db9e110ee441c4f13ce115f841fa48c41d78750986214b395557" origin="Generated by Gradle"/>
             <sha512 value="e859aa7bf03225dacdd043c67f939e9250e3e223ef031a0cb67717974362e9df2bd1d9d704e7b52e7408230f01d816bab7ec1a745d9cf2feb26ebd8398026c7e" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="net.javacrumbs.json-unit" name="json-unit" version="2.38.0">
          <artifact name="json-unit-2.38.0.jar">
+            <sha256 value="23f7f47f5715fe128ee24cfbfb4369c6c84c3af49b3b509065da7f1ca6902e2f" origin="Generated by Gradle"/>
             <sha512 value="aca6573e4e2a2ec3b123d3ad7e8f4c9c6fb4fd33b2d01266566a2d37d96ab5cd03e8b01ce977f006be19f02c34e8795ddd14d9278a8974fe795c2f8a37b930c0" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="net.javacrumbs.json-unit" name="json-unit-core" version="2.38.0">
          <artifact name="json-unit-core-2.38.0.jar">
+            <sha256 value="a8bc105b9e3860ff39311fef8fb85b384f07a15d351fe3744d6ae91a9a3a89af" origin="Generated by Gradle"/>
             <sha512 value="799c2f13120b7e1cff5e86c5674245cfd0e9099b0c47864cbc1381b07040d45df4163a092033269ee8de24c456e82dac73001969e3c39a3e521f7866ed354ff8" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="net.jcip" name="jcip-annotations" version="1.0">
          <artifact name="jcip-annotations-1.0.jar">
+            <sha256 value="be5805392060c71474bf6c9a67a099471274d30b83eef84bfc4e0889a4f1dcc0" origin="Generated by Gradle"/>
             <sha512 value="cb312b3f571d91ef183c119d878f50464ffd97f853b7311cba386463f295e8b7b3a5a89ed4269a045cacd5aa7cb4c803d4882854a0fddefa9bbc28c72aa6c786" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="net.jqwik" name="jqwik-api" version="1.9.3">
          <artifact name="jqwik-api-1.9.3.jar">
+            <sha256 value="4bce7e80beb6d9d7092a799fa8a509d76cc31dbb20c938a9952965c15d1dd9b2" origin="Generated by Gradle"/>
             <sha512 value="6e414bf27136823c52b0cc24c319449918c830a19d3e76fd29fcf2d36aa102ee8335311be3f382685ceada3b9592ff053974eed2b47a21624ef95c3f7aa03b3d" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="net.jqwik" name="jqwik-engine" version="1.9.3">
          <artifact name="jqwik-engine-1.9.3.jar">
+            <sha256 value="b85592ee78e30239ccfdca7a134f918ee94ebec51ad29a313fc9a676d97b3ede" origin="Generated by Gradle"/>
             <sha512 value="9dcd4b781fc6c89e3fcee36231fb68f17b66ce55f15231e03f6b628242edb7b71b411671fe8596a0cb2c27ce9a991fd4370d6031612b311d1030256a6bdae34d" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="net.sf.ehcache" name="ehcache-core" version="2.6.11">
          <artifact name="ehcache-core-2.6.11.jar">
+            <sha256 value="ffe3580aadb6e07f86e49e326f3402fe8dfbf3470eb2782d68507bd31d75af88" origin="Generated by Gradle"/>
             <sha512 value="9ab604a898a9aae0700af7885bc98ab3f665b7512f330e8b93c1f7c965ffef7526e55f6794619ce412889a15fae6f0d46b0c02f5ee4f3667d0c8ce531f3435a4" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="net.sf.jopt-simple" name="jopt-simple" version="5.0.4">
          <artifact name="jopt-simple-5.0.4.jar">
             <pgp value="517B94F8D0A46317A28D8AB30DA8A5EC02D11EAD"/>
+            <sha256 value="df26cc58f235f477db07f753ba5a3ab243ebe5789d9f89ecf68dd62ea9a66c28" origin="Generated by Gradle"/>
             <sha512 value="cbc27e0b6da6ae4b6245353d6626d2e3c171c3026a555fa21e8ef61b30714e286db85086d1a57c167016e8a7f07be2a243e34b3ab504b1877806f3bcec5df986" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1269,58 +1459,69 @@
       </component>
       <component group="net.sf.saxon" name="Saxon-HE" version="12.9">
          <artifact name="Saxon-HE-12.9.jar">
+            <sha256 value="8f3a9216a537367132293eacbba9df062eace8f8b16a184af59e2e4839d4cd41" origin="Generated by Gradle"/>
             <sha512 value="91712b90b683ff0a7e027f9a9bf48902c427057c9cc1868accca77e39100b0dcb90a2415c5783df188a12f7aa425f93e7832e3cb97b404dc34c24c5fad93e469" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="net.sourceforge.expectj" name="expectj" version="2.0.7">
          <artifact name="expectj-2.0.7.jar">
             <pgp value="B59102FF59B40A5528ADEADB99CA0918C37E2AE4"/>
+            <sha256 value="ac1292ade2624d1077227a3e20d4b8ec1b6bd7d27c02f4fb3e1c23e1b29ee7af" origin="Generated by Gradle"/>
             <sha512 value="d9024bd88a2b7bad711bb71b862d9b1699f5db3af3b9e0ef78036b079be8b5ff161522a89963672556287576e65d5474190a99cc62a29970b83917640d675b0c" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="net.sourceforge.htmlunit" name="htmlunit" version="2.70.0">
          <artifact name="htmlunit-2.70.0.jar">
+            <sha256 value="9957f53bd8eb96d5afc78766415486567549d9b204dc5d931a5690f8f10155ee" origin="Generated by Gradle"/>
             <sha512 value="5493642b618a74c9d697fa9882a27d8d68b3f1387f0a93c4cc8f215cb293deef5abe1372200c856b39c083bc2c71b88940b8c3c1fd5cb3ac8e6d651cae2019cc" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="net.sourceforge.htmlunit" name="htmlunit-core-js" version="2.70.0">
          <artifact name="htmlunit-core-js-2.70.0.jar">
+            <sha256 value="7008cd93de74c8413b94ecf8b63fe642ee73168c5beba8c33b76ac80c4e4865c" origin="Generated by Gradle"/>
             <sha512 value="b340ea6f41d9fd3c0fa25df445896c3075fe6fb50d6653c4e05ed6fd7c34c775bba6d202f580a84ba8fc02f8db393b8d133ec5280d716b18c36dc4dde25a4ab6" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="net.sourceforge.htmlunit" name="htmlunit-cssparser" version="1.14.0">
          <artifact name="htmlunit-cssparser-1.14.0.jar">
+            <sha256 value="c684323dc4e2198d0abebe5f0c025560c3c10c34c1d228646e40ae747135f607" origin="Generated by Gradle"/>
             <sha512 value="63343e0f7de5455755cb1fc1bce7c9a9408acb9ebd52503d1f8a2d6a2d9a1741576f7e4d2cd504a342cc66da5edb5d9a1d9121960006cef69030482a0fea67b7" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="net.sourceforge.htmlunit" name="htmlunit-xpath" version="2.70.0">
          <artifact name="htmlunit-xpath-2.70.0.jar">
+            <sha256 value="3eaee2f5058da2ebcf5c74f0d977c032cfbd9300564eb49870dce399706b0a73" origin="Generated by Gradle"/>
             <sha512 value="dca98a28fd348dd5d168e34bb0f8187642b19c7cfd5f7b9e49a550ac0bc9cd243b8bb79ad012f0f25911454ea82627081f31b5d76c8a5f3ccb8a091336ea5cd3" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="net.sourceforge.htmlunit" name="neko-htmlunit" version="2.70.0">
          <artifact name="neko-htmlunit-2.70.0.jar">
+            <sha256 value="e9e011e102ef85cfb4369580babd60a5c62b806e21224451f7e3e1949e475565" origin="Generated by Gradle"/>
             <sha512 value="0ece64225cf8fd8743e0b20284336b18d52766799b9f5646e0626b83a2091285e9757cc51f4855cc0daad58d5ceeb6e6a3a8651959293ae63343f5fba9547573" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.abego.treelayout" name="org.abego.treelayout.core" version="1.0.3">
          <artifact name="org.abego.treelayout.core-1.0.3.jar">
             <pgp value="D790F72EA8FD39551012B62DCF9F3090CE4CB752"/>
+            <sha256 value="fa5e31395c39c2e7d46aca0f81f72060931607b2fa41bd36038eb2cb6fb93326" origin="Generated by Gradle"/>
             <sha512 value="d12d44cd9dde470035ce72785f1a8af741ca0055b0da174064931d830bd0efdc887f1b3fa6abe452498fbb48ea820b0a842ba55ab6a52a4a1cc914330e655b1d" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.antlr" name="ST4" version="4.3.4">
          <artifact name="ST4-4.3.4.jar">
+            <sha256 value="f927ac384c46d749f8b5ec68972a53aed21e00313509299616edb73bfa15ff33" origin="Generated by Gradle"/>
             <sha512 value="ec40080db7c7612ed04f3ff5faa6f2a38304f252d2e246c026fc76b47e03f83427f71aef9dc7cb131b3451e31b68bcd7e597f7b929504186428f517274401199" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.antlr" name="antlr-runtime" version="3.5.3">
          <artifact name="antlr-runtime-3.5.3.jar">
+            <sha256 value="68bf9f5a33dfcb34033495c587e6236bef4e37aa6612919f5b1e843b90669fb9" origin="Generated by Gradle"/>
             <sha512 value="7714970915d7187d7abb32610b3764305e67798d8289f8a59461ebb3bf7f26a09b933279de1cf95c14bbb60f213bf3f1af6aa8f20e75b26768223883a6883aaa" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.antlr" name="antlr4-runtime" version="4.13.2">
          <artifact name="antlr4-runtime-4.13.2.jar">
+            <sha256 value="dd3e8a13a2d669bf84fb8d834de35ce4875f27157698d206241ec8488aadcaf7" origin="Generated by Gradle"/>
             <sha512 value="1c3e47b6b5dc40ca13927a7ae2ed187f470b8f406cea325e73c7a18af8e07b9ada0484312dd611f225f030b5585924932c702fd9326c143a626e271682b2b95e" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -1331,46 +1532,55 @@
       </component>
       <component group="org.apache.ant" name="ant" version="1.10.15">
          <artifact name="ant-1.10.15.jar">
+            <sha256 value="763acda4a69588c9ea8817a952851ff0c2fc4bffa1d081c2565dc407f29d5794" origin="Generated by Gradle"/>
             <sha512 value="d5109838090a4463098c4a82c171d07b92d42633010e045388fb8a68744fdcdd2b07a75a9fb56783e83ecbcc80664119ccc44537993125d6724956e114508316" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.ant" name="ant" version="1.10.17">
          <artifact name="ant-1.10.17.jar">
+            <sha256 value="8be692e02837f41a47a3d21cde6655792142fdf42fe23bcb16d7129cad9b2284" origin="Generated by Gradle"/>
             <sha512 value="f1cc1a82e1abcf613d4ccf080f83fcd51acd7d4a2f1c2841cca90dd1ebaa96fab2df6411abd2cf97e2ec74231b1540a5d15c12117ba777ab1538b61f9f2b5fa9" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.ant" name="ant-antlr" version="1.10.15">
          <artifact name="ant-antlr-1.10.15.jar">
+            <sha256 value="619e361609d446fe6ab67d1d45b8656e68644cbd7c45bbed5c2c8816408d8dd5" origin="Generated by Gradle"/>
             <sha512 value="a624eeaf420a530fe6370a102bbf24eedc43fc403953691e77a1e10b8938aa221484139892e87c56e39773f4193bccea927c0c4bc27ed23663249b5296ebb9c4" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.ant" name="ant-antlr" version="1.10.17">
          <artifact name="ant-antlr-1.10.17.jar">
+            <sha256 value="7317fd1372edb4fddf01a79d85790da91fa2b952521f2e64404ddb837921d8e5" origin="Generated by Gradle"/>
             <sha512 value="8677684fcc50d93702a20dcba5078ff5d12807be9b938bed31b7e07218dcf7fb20294fef0d36b9d847fbd18acc7dda0a01b3273365938bba952e47d8e3afd626" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.ant" name="ant-junit" version="1.10.15">
          <artifact name="ant-junit-1.10.15.jar">
+            <sha256 value="9a455eeb4bedc1d8bcd4b8099d4b1f18f1bf1bc977cd6e389a106fe0cf366711" origin="Generated by Gradle"/>
             <sha512 value="c6ef0c35bf184a4ee0ff3640162f8d2af5d823e008175ca50b5203b2b5022a3013a47eddc14bcd8c01c44eefaa6cf7d6345f4978506c8e36f5b18051161bed2b" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.ant" name="ant-junit" version="1.10.17">
          <artifact name="ant-junit-1.10.17.jar">
+            <sha256 value="6baddccf17a1fc9f9ce0930a5028acf0eff535d26ab4863092dd94154c45a529" origin="Generated by Gradle"/>
             <sha512 value="a5dfea7d66c794614f392db09ee31874cd951c85afb77d2dc385f12c52df36dd43337e0ef33f07c2f444d8eefff33ea44da1c1df971e5dcf9c6c05a9905325a3" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.ant" name="ant-launcher" version="1.10.15">
          <artifact name="ant-launcher-1.10.15.jar">
+            <sha256 value="5c8551990307a032336d98ddaed549a39a689f07d4d4c6b950601bf22b3d6a1b" origin="Generated by Gradle"/>
             <sha512 value="6fc2b33cde07493704c201b759e6813ba5f60ffd3925a52bb097a7fffedbc950bcc4fbc93fe0a86ec2a41872b16b92868b6be87632d3e8e0dc89a5b4143ccb9e" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.ant" name="ant-launcher" version="1.10.17">
          <artifact name="ant-launcher-1.10.17.jar">
+            <sha256 value="f6e3de06dc0ea396638004f1a003f55fdbd20c3e7ccfb9b7a524f49fd0ae8568" origin="Generated by Gradle"/>
             <sha512 value="73fef113f238f6fcfe94e7d58824207ea6557626262f27d3bd20ab3bbba6af848ee5998ad915a7fa3999e0e368bb1f7ae1bf90888295989a15236a73c7d08709" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.ant" name="ant-testutil" version="1.10.17">
          <artifact name="ant-testutil-1.10.17.jar">
+            <sha256 value="53be7f247259060fffdba517fc4840d0831fa9747884d1bb9231cf290cfe9214" origin="Generated by Gradle"/>
             <sha512 value="b503f341e4b8c619a623f923f2a38908087e1f3952ce21b1f19c2e297cb2d9a285d457e794769399e37ee51d88940aba068631aac373d89da0d5894d17f1431e" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1383,6 +1593,7 @@
       <component group="org.apache.bcel" name="bcel" version="6.11.0">
          <artifact name="bcel-6.11.0.jar">
             <pgp value="2DB4F1EF0FA761ECC4EA935C86FDC7E2A11262CB"/>
+            <sha256 value="5901a6439ffb2aff0eb533cfab4dc9c054d143e4caa1bd33460efaa575f7cfdb" origin="Generated by Gradle"/>
             <sha512 value="280b7f9689f6ab5a8ce7f24966a6874e5fb486fc799d576c40d3036988e04ec4be102bc26bce0dd91ef13640d4289d3d2d1ea2a81106336db9fd8786320e2cc6" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1393,11 +1604,13 @@
       </component>
       <component group="org.apache.commons" name="commons-collections4" version="4.5.0">
          <artifact name="commons-collections4-4.5.0.jar">
+            <sha256 value="00f93263c267be201b8ae521b44a7137271b16688435340bf629db1bac0a5845" origin="Generated by Gradle"/>
             <sha512 value="ee43c513ac9dcbd7dd23b5cbb4ea5f65a2e10cdfbb403d080b87e778b3b45062315522297c41eca514a9a946228ad7650f0a572d5b78effb8260dd8084131988" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.commons" name="commons-compress" version="1.26.2">
          <artifact name="commons-compress-1.26.2.jar">
+            <sha256 value="9168a03141d8fc7eda21a2360d83cc0412bcbb1d6204d992bd48c2573cb3c6b8" origin="Generated by Gradle"/>
             <sha512 value="7106a722d26da945f6d6eea6f0c61b420bff45749bf60c572d992c545b10ccd926dc4b9a9f366ff29d5940c99f26dfeca98f6c1c4b630632a65f04c2d7b94b26" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1406,29 +1619,40 @@
             <sha512 value="5e1fcf9f552ab86beceef6743609e97d700dcbaa5b5ee58858e765c1238cd4dbca2852e1eb415bc2a09dad478d31197ddf09b2ba148dd30be8c9ecd565775226" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.commons" name="commons-compress" version="1.28.0">
+         <artifact name="commons-compress-1.28.0.jar">
+            <sha256 value="e1522945218456f3649a39bc4afd70ce4bd466221519dba7d378f2141a4642ca" origin="Generated by Gradle"/>
+            <sha512 value="f1f140f4f40ab3cf3265919db9dbb95a631a29aa784e305f291de4e68876bb711d9217d62d7937cddddd393982decdf71a608b4b3ab7f4e6375cf28af2893d7f" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.commons" name="commons-lang3" version="3.12.0">
          <artifact name="commons-lang3-3.12.0.jar">
+            <sha256 value="d919d904486c037f8d193412da0c92e22a9fa24230b9d67a57855c5c31c7e94e" origin="Generated by Gradle"/>
             <sha512 value="fbdbc0943cb3498b0148e86a39b773f97c8e6013740f72dbc727faeabea402073e2cc8c4d68198e5fc6b08a13b7700236292e99d4785f2c9989f2e5fac11fd81" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.commons" name="commons-lang3" version="3.20.0">
          <artifact name="commons-lang3-3.20.0.jar">
+            <sha256 value="69e5c9fa35da7a51a5fd2099dfe56a2d8d32cf233e2f6d770e796146440263f4" origin="Generated by Gradle"/>
             <sha512 value="1c72db334ea44f932c35e602b78907865f5bab43e30c871c9be67c8184eaa778f32d7bc3ab525d5921cd28619d3f9babfd483f17de54f007ee07db2e074b0307" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.commons" name="commons-lang3" version="3.8.1">
          <artifact name="commons-lang3-3.8.1.jar">
+            <sha256 value="dac807f65b07698ff39b1b07bfef3d87ae3fd46d91bbf8a2bc02b2a831616f68" origin="Generated by Gradle"/>
             <sha512 value="fb0fe98385496a565678a000c26a3245082abfbf879cc29a35112b4bf18c966697a7a63bb1fd2fae4a42512cd3de5a2e6dc9d1df4a4058332a6ddeae06cdf667" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.apache.commons" name="commons-math3" version="3.6.1">
          <artifact name="commons-math3-3.6.1.jar">
             <pgp value="41A1A08C62FCA78B79D3081164A16FAAEC16A4BE"/>
+            <sha256 value="1e56d7b058d28b65abd256b8458e3885b674c1d588fa43cd7d1cbb9c7ef2b308" origin="Generated by Gradle"/>
             <sha512 value="8bc2438b3b4d9a6be4a47a58410b2d4d0e56e05787ab24badab8cbc9075d61857e8d2f0bffedad33f18f8a356541d00f80a8597b5dedb995be8480d693d03226" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.commons" name="commons-text" version="1.10.0">
          <artifact name="commons-text-1.10.0.jar">
+            <sha256 value="770cd903fa7b604d1f7ef7ba17f84108667294b2b478be8ed1af3bffb4ae0018" origin="Generated by Gradle"/>
             <sha512 value="afd836a1094449e0a791fee67363666c47b6d24acff353a5089b837b332c0f4af89565c354682521e37062d20e6b52d70c77bb4f24cca9b9532c274fc708a831" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1439,42 +1663,50 @@
       </component>
       <component group="org.apache.commons" name="commons-text" version="1.14.0">
          <artifact name="commons-text-1.14.0.jar">
+            <sha256 value="121fce2282910c8f0c3ba793a5436b31beb710423cbe2d574a3fb7a73c508e92" origin="Generated by Gradle"/>
             <sha512 value="4975879372241025bd0a47fe540ed7d0cd3e5eba474b12af67a8c6016be0fbb4f4a3a4a0064f4d2b6aebce67d88ee814da345a5ba3a6ee4f6293b3b4e7bbd065" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.commons" name="commons-text" version="1.3">
          <artifact name="commons-text-1.3.jar">
+            <sha256 value="8185b3a5311092d83ed1f184c2d093b3105d726bbd76867c32b3511542bb99a8" origin="Generated by Gradle"/>
             <sha512 value="697af1320d949b0e03d29cc097143c4f8724e26ec944b936c201b983b88117dd7037f843f099b0fd955f1f5355c4d5fc2f12ca7c2b8aea3ce16d9b01b83fbcb5" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.apache.felix" name="org.apache.felix.framework" version="7.0.5">
          <artifact name="org.apache.felix.framework-7.0.5.jar">
             <pgp value="3E97979229E01DFAB9774BBC9054823A859A7237"/>
+            <sha256 value="aba72932c5ffe52d1ae9fb735415474bc8305fd04f050e851f3a8f67da1834fd" origin="Generated by Gradle"/>
             <sha512 value="b632c8228e70f0917c1a2bda5dafceeff6582c5f3372b4000c7823018baefcfe695d108fa21820151b7b56f8fb24b0fb3876c3c966436bebba4cf5e759a2c51a" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.httpcomponents" name="httpclient" version="4.5.13">
          <artifact name="httpclient-4.5.13.jar">
+            <sha256 value="6fe9026a566c6a5001608cf3fc32196641f6c1e5e1986d1037ccdbd5f31ef743" origin="Generated by Gradle"/>
             <sha512 value="3567739186e551f84cad3e4b6b270c5b8b19aba297675a96bcdff3663ff7d20d188611d21f675fe5ff1bfd7d8ca31362070910d7b92ab1b699872a120aa6f089" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.apache.httpcomponents" name="httpclient" version="4.5.14">
          <artifact name="httpclient-4.5.14.jar">
+            <sha256 value="c8bc7e1c51a6d4ce72f40d2ebbabf1c4b68bfe76e732104b04381b493478e9d6" origin="Generated by Gradle"/>
             <sha512 value="a084ef30fb0a2a25397d8fab439fe68f67e294bf53153e2e1355b8df92886d40fe6abe35dc84f014245f7158e92641bcbd98019b4fbbd9e5a0db495b160b4ced" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.apache.httpcomponents" name="httpcore" version="4.4.14">
          <artifact name="httpcore-4.4.14.jar">
+            <sha256 value="f956209e450cb1d0c51776dfbd23e53e9dd8db9a1298ed62b70bf0944ba63b28" origin="Generated by Gradle"/>
             <sha512 value="f16a652f4a7b87dbf7cb16f8590d54a3f719c4c7b2f8883ce59db2d73be4701b64f2ca8a2c45aca6a5dbeaddeedff0c280a03722f70c076e239b645faa54eff9" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.apache.httpcomponents" name="httpcore" version="4.4.16">
          <artifact name="httpcore-4.4.16.jar">
+            <sha256 value="6c9b3dd142a09dc468e23ad39aad6f75a0f2b85125104469f026e52a474e464f" origin="Generated by Gradle"/>
             <sha512 value="168026436a6bcf5e96c0c59606638abbdc30de4b405ae55afde70fdf2895e267a3d48bba6bdadc5a89f38e31da3d9a9dc91e1cab7ea76f5e04322cf1ec63b838" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.apache.httpcomponents" name="httpmime" version="4.5.14">
          <artifact name="httpmime-4.5.14.jar">
+            <sha256 value="d401243d5c6eae928a37121b6e819158c8c32ea0584793e7285bb489ab2a3d17" origin="Generated by Gradle"/>
             <sha512 value="884b062028f68278389b74ccfbc35142caae489ceda5df01d2c60df884b9604cd4055bf4e1524e0358661fa0e88e93e614fb6be590cb940510b07a37c0b0a20c" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -1496,17 +1728,20 @@
       <component group="org.apache.ivy" name="ivy" version="2.5.2">
          <artifact name="ivy-2.5.2.jar">
             <pgp value="CE8075A251547BEE249BC151A2115AE15F6B8B72"/>
+            <sha256 value="98428d545ea63cd9a0aaf255caf42cb8cb64fe430dbb5e709aed536d4daeed04" origin="Generated by Gradle"/>
             <sha512 value="9a715fda709df799477f62370cc9dbcab4111c9d98bdff1c1525c78dcf7fc008da28f5e81b0650f185050543d55b595a5793c0adcd3dc8801692ef0c18d04bce" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.ivy" name="ivy" version="2.5.3">
          <artifact name="ivy-2.5.3.jar">
             <pgp value="9C60C6B3A5A9DF8FEDD299D65BE0BA8CB80602AE"/>
+            <sha256 value="9502aa5aabf0b1484924a13ef4b5d24f121f7f91aab6768f11cc9d0906c0803b" origin="Generated by Gradle"/>
             <sha512 value="be291ddf612703fd3657a72820199430d053a8e06f7631e78477b428ba343631bc36b16bde8c25df544b64b420be84568d3898921f8db63fe676fb590586355b" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.apache.jackrabbit" name="jackrabbit-jcr-rmi" version="2.21.9">
          <artifact name="jackrabbit-jcr-rmi-2.21.9.jar">
+            <sha256 value="f05dfe7e16f1a2640524100b66b595887311c7cc3819a4729edeed6de7ae58f6" origin="Generated by Gradle"/>
             <sha512 value="f30dd0a1aceada30c0ceba7954e9420df24cc8d3958d13654f95aa117e205277d4cb01ceff48a9b673b161b5085c9729835e11bd521bcd5189b8d67986049978" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -1525,6 +1760,12 @@
             <sha512 value="e6d6a8ad6542f071978b46858063a1a6fa2a3709a69460078cab3cb57907c10cd7c0746b83af04d8284120c3382ebdbd1aeabda4c370041c187b903daf71a94b" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.logging.log4j" name="log4j-api" version="2.26.0">
+         <artifact name="log4j-api-2.26.0.jar">
+            <sha256 value="820de7bbaf430eaf2e3e5ccb92f23e2085797c5ac4d4f7fc6c8b660fbefa1dbc" origin="Generated by Gradle"/>
+            <sha512 value="86516750d5a43428b977da45d403718e903451bf0b9401ba306a35f001e812b8366c73978fbf6c628a93949d9386e3a21661f85672291111e5397e94ca1cc78f" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.logging.log4j" name="log4j-core" version="2.25.2">
          <artifact name="log4j-core-2.25.2.jar">
             <sha512 value="9923dafcec7d8015b2656ae1881aef7b448656b08f235371208c8e10aaf5d6220b7251f7880262ef03883783e8b0fce120a55fe380bc673ac35d34fb8100b24d" origin="Generated by Gradle" reason="Artifact is not signed"/>
@@ -1540,53 +1781,69 @@
             <sha512 value="fc61e84587c6c060f89f71faad6a547b1fbdeba706d795daa210df947b08092b039ed40b0c9a4b507fd6207d33f796870209e47ca62c1f224895d2deb7b415fe" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.logging.log4j" name="log4j-core" version="2.26.0">
+         <artifact name="log4j-core-2.26.0.jar">
+            <sha256 value="406bb3132c47a5d322e5c571feb0787ca84496469f346eb51f1ef2ee45499902" origin="Generated by Gradle"/>
+            <sha512 value="9523b574308be31c741252d2f789fb81d01d9526eaa3e94f25136f1044149ac235fef379514b1cc43611ca68f5e2d8400256886b49f4ef2686582c96b8679792" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.maven" name="maven-api-annotations" version="4.0.0-rc-5">
          <artifact name="maven-api-annotations-4.0.0-rc-5.jar">
+            <sha256 value="1f7325c01a0ac5a5206caff09fa388520c6505dab850178f452d2c6aad3d3c83" origin="Generated by Gradle"/>
             <sha512 value="e534c2238743d8776e02ff8369ee8906084ab343479931e0ae77c51ed5d45391fee17b548a2128384004634ca50b7827fd271573cad06e71a8bee7c3913baae3" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven" name="maven-api-core" version="4.0.0-rc-5">
          <artifact name="maven-api-core-4.0.0-rc-5.jar">
+            <sha256 value="2d9607e65888bc5d07e86d885ca5c48e654d06a1b4cbf10bad25f5bf6bb779c1" origin="Generated by Gradle"/>
             <sha512 value="366058adf240ccffa00d10b5b4a3b6bd40ca850df16f627c3a90e65e950a7ba4b90062c06243732555e7c8f5bbc9ce11cb22c81ec35424e323032772b46ddd3e" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven" name="maven-api-di" version="4.0.0-rc-5">
          <artifact name="maven-api-di-4.0.0-rc-5.jar">
+            <sha256 value="ff17f86d5b42da0c1b1ccae0f3e283a49f36bff2689e710c2c1cbe32c95f81b6" origin="Generated by Gradle"/>
             <sha512 value="0aef08ba0baeaa2b6eae21aba93ff16e4a4a621c469859d7f7619433f5b31e90cd0ad8cdc464770b97c7eb99ca2d39861b314d02aad3fbaedade0e2838856671" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven" name="maven-api-metadata" version="4.0.0-rc-5">
          <artifact name="maven-api-metadata-4.0.0-rc-5.jar">
+            <sha256 value="b349f78dfbe02657f3eada2cd6e1a8196466817b50734aad60db6f8f6c5be0a5" origin="Generated by Gradle"/>
             <sha512 value="fedd813d3d40ff67f9dee56215d0db2e50d8f6d94c53583f7a5cf3eff2dbb7d5ae023e0adaa26249968ec5483db2d47a16b56a8c4551708acc4ce733e4b9d04b" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven" name="maven-api-model" version="4.0.0-rc-5">
          <artifact name="maven-api-model-4.0.0-rc-5.jar">
+            <sha256 value="ae84c4f45d85452e2df29714eca4ff8719fbfc25a7b39368755f18a58c6b0b5d" origin="Generated by Gradle"/>
             <sha512 value="0d2f6480c8637d1e3dbbc1d35ffe3ab6e638ecf7dd70024e8afb5c61d18fb45e2ef3a784675ffa2b3c3d975e4ad6be02c293d596b1dea9cd9f4ee4906d545aed" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven" name="maven-api-plugin" version="4.0.0-rc-5">
          <artifact name="maven-api-plugin-4.0.0-rc-5.jar">
+            <sha256 value="c17a94c34221e8373316206d9c0b57ea673cd11de54097296ae230bf428582ce" origin="Generated by Gradle"/>
             <sha512 value="1c71bc3ca6a8283a25b24ebf7d7cb9b744e6811c2b91392a5e9b061e795128a58888796db3cff95e747dff4038dccc21382f7578ddb70560db82c3be25c8662b" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven" name="maven-api-settings" version="4.0.0-rc-5">
          <artifact name="maven-api-settings-4.0.0-rc-5.jar">
+            <sha256 value="0917a779806f101337b41692c88cd236da521b33c9665de6843d582b19d63658" origin="Generated by Gradle"/>
             <sha512 value="df4a485798fa645ce9344125b85f8cac510f3d66e79691be4e3835debce7d3886eaf0557f2e4047029dd5cad0a7b7bd970b7c0a626d351d4bddd407f72a2a8c6" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven" name="maven-api-spi" version="4.0.0-rc-5">
          <artifact name="maven-api-spi-4.0.0-rc-5.jar">
+            <sha256 value="f0c30a3d5f62051351574870050a1e1aec14550cdf1acf4ebde4a8b53bd20ef2" origin="Generated by Gradle"/>
             <sha512 value="88902e2d79aa15ac66a804b30a22e11d63934735c571335b6f5e93782698de0e1693cd42fe675a0416be8fc1fe4e5fca09c2097843e1f0abf78e085c1abca5aa" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven" name="maven-api-toolchain" version="4.0.0-rc-5">
          <artifact name="maven-api-toolchain-4.0.0-rc-5.jar">
+            <sha256 value="c9c596ee2845b45a977adcf3a7446d55d6b076045a656bb08c3f5cae70129dda" origin="Generated by Gradle"/>
             <sha512 value="eb3643a85ae3d2d7dd537c969275084e91d4de7dd068940a730209dd416a9b98fa96feb94d54e80add005b95fab6257f05a9e81074a6040e90f18b3fc39e1cb6" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven" name="maven-api-xml" version="4.0.0-rc-5">
          <artifact name="maven-api-xml-4.0.0-rc-5.jar">
+            <sha256 value="358851a87edd0ddd566a437470ea021ba851a0487ec4d14825ff04db03ff5877" origin="Generated by Gradle"/>
             <sha512 value="0ed4deea6ede635f4e8644d9a5b4f20c357d3aa899b51b7b9433ea560fcbb0a4012a9ddb3df6af65f9fe014dc69c24a205fcadb95bac897a490905126802a09b" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1602,16 +1859,19 @@
       </component>
       <component group="org.apache.maven" name="maven-artifact" version="3.9.15">
          <artifact name="maven-artifact-3.9.15.jar">
+            <sha256 value="f154c31f15ac97c37b9cdf9f8d63cde5053c470d2daf54df7dfd3bb3c9e501c6" origin="Generated by Gradle"/>
             <sha512 value="0aab778be865fe8483d9741cf927661e0b1cd8c289d0a31e8257939bf0a0fd25920c27b2d26edc1957eec7eeeba1862808d7143fd43d20e1c7b9eee23bb5a47f" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven" name="maven-artifact" version="4.0.0-rc-5">
          <artifact name="maven-artifact-4.0.0-rc-5.jar">
+            <sha256 value="a6f9df1fd54075dd90c2a9977ed1f13dd3d73d5e0f4e1d533a94c32a45d6d627" origin="Generated by Gradle"/>
             <sha512 value="fb3ca7cab5c65299da0482e0a5dd67532c612ed7be81692cb11ba7a99840257152917e50948f91d8b63e5d04f535ba80b2aeefb4b3485638c9b322e040be030c" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven" name="maven-artifact-manager" version="2.2.1">
          <artifact name="maven-artifact-manager-2.2.1.jar">
+            <sha256 value="d1e247c4ed3952385fd704ac9db2a222247cfe7d20508b4f3c76b90f857952ed" origin="Generated by Gradle"/>
             <sha512 value="254f57211f61f82297310250cf53bfb2b2a4c4155fd2ae4144779631d6dd39260187c71972186a1bd3bf7e20eefcd4de339e38efae81b0107dec632b93b01409" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1627,11 +1887,13 @@
       </component>
       <component group="org.apache.maven" name="maven-builder-support" version="3.9.15">
          <artifact name="maven-builder-support-3.9.15.jar">
+            <sha256 value="905745a1735ddd713c118315384a7b32af33a2b7017c227da12ad342fc08d852" origin="Generated by Gradle"/>
             <sha512 value="445c1493e214e236995d625715f1274509712a96c535d89a7b9886139e50e41dd704b03ecb5db270af267402440c077f01a23032c0303686e6e66f0a3cb0b1f2" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven" name="maven-builder-support" version="4.0.0-rc-5">
          <artifact name="maven-builder-support-4.0.0-rc-5.jar">
+            <sha256 value="30e42f94a606d73f7161a0a0501acf2604606a05c82efb27f1da9c5b587f9c52" origin="Generated by Gradle"/>
             <sha512 value="5307eb2cfda928ee2a763493e644b9ab2db3c7f6465e86aa954fdb2ea24a0e89125616c883cfff4876b528bbfc684902ee6c14f6ec8bed1a186aca2028b01f88" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1647,6 +1909,7 @@
       </component>
       <component group="org.apache.maven" name="maven-core" version="3.9.15">
          <artifact name="maven-core-3.9.15.jar">
+            <sha256 value="9cc1a87e4864cf45ee6d896e39499f5ed257e99d3b0adb5a3b5f77299777f8d0" origin="Generated by Gradle"/>
             <sha512 value="67b08bfeaf786f06fcfaa4046d45f190371b333669ed5ac61004c4ffa24884a1759ba881ff5b1a242e3d1c0f1d17c333181a70f8525c80335145f5299d47d681" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1662,11 +1925,13 @@
       </component>
       <component group="org.apache.maven" name="maven-model" version="3.9.15">
          <artifact name="maven-model-3.9.15.jar">
+            <sha256 value="591722f628000086c5af93d5a367aaefec2f78476b6f732ad70a05d49942fbfd" origin="Generated by Gradle"/>
             <sha512 value="af0483e9124180a82792fff165de6baf898fbe563b6bc611cf6dcd0241e7e2084fb82c79d30c6b6ea27ce4c1150268feeb7599123f981e7b2f4e2313758ea22c" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven" name="maven-model" version="4.0.0-rc-5">
          <artifact name="maven-model-4.0.0-rc-5.jar">
+            <sha256 value="bd5606aa7b223e34da84ffcb89c5597e1666421d2f0c52056bdb2fcaffc66ef5" origin="Generated by Gradle"/>
             <sha512 value="208a1f3688a800ca8ad5da566f6209491381eacc92a1084d3ef83c5d5b3e3fdc0810cb719ef2b0f90ff690638e5e69cf9a11e1fdd0ca042d6f1f06307cc3f2fd" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1682,11 +1947,13 @@
       </component>
       <component group="org.apache.maven" name="maven-model-builder" version="3.9.15">
          <artifact name="maven-model-builder-3.9.15.jar">
+            <sha256 value="73f653c16e06c62b391c72bb3b68e78eebd07eadb1214a60a60df81ec2c733fc" origin="Generated by Gradle"/>
             <sha512 value="8fc65c31dc62f1b268b2cf41e2dead726096e841833662aaef53361dd3123e5f32f496d1e90cf5136826a02700bdd99e86c7cddbbaa6f255b2d78200429e480b" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven" name="maven-model-builder" version="4.0.0-rc-5">
          <artifact name="maven-model-builder-4.0.0-rc-5.jar">
+            <sha256 value="1047ee3d545884a594753e7b4ad485ac8f2ed160e511568094b78baf0c297215" origin="Generated by Gradle"/>
             <sha512 value="6747a1efa6ac7db4287938c549f5e7c4f89197f8e3799782a68ca45a821bcb444cf087ebf7750fdca72da94b2fff87f0312b43f0dbafdd849c04ee05798b936c" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1702,21 +1969,25 @@
       </component>
       <component group="org.apache.maven" name="maven-plugin-api" version="3.9.15">
          <artifact name="maven-plugin-api-3.9.15.jar">
+            <sha256 value="ea4ae22e2b86e7b63c674c3b5cdfcb074d2c54237b983d9292f94b6966986938" origin="Generated by Gradle"/>
             <sha512 value="601bcfc6fb65927ee36b9b47203d9a1f9811a388cd171d6ee80cd294b401a95361301d10347dcaa4cf4bbf9457175fdaa88fa3f996e4da19cc5d6f7e79ea53d1" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven" name="maven-plugin-registry" version="2.2.1">
          <artifact name="maven-plugin-registry-2.2.1.jar">
+            <sha256 value="4ad0673155d7e0e5cf6d13689802d8d507f38e5ea00a6d2fb92aef206108213d" origin="Generated by Gradle"/>
             <sha512 value="e303d6ee50acbd1fbf315ff7653a8dce82932f744565c7055dd3b08547ce78897098a7184c4b87607c9015d64d5792eca76e062d18c8d5c9dced2f6714f335c3" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven" name="maven-profile" version="2.2.1">
          <artifact name="maven-profile-2.2.1.jar">
+            <sha256 value="ecaffef655fea6b138f0855a12f7dbb59fc0d6bffb5c1bfd31803cccb49ea08c" origin="Generated by Gradle"/>
             <sha512 value="4745e638f8ebb3ec6bb1a382b85009d929cddaa06dcd4786a089ae7720466afc8e94ebcf8a99c88b3b4489cccc173741871bb8e2f5ca3fa8f3c793eb64c84747" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven" name="maven-project" version="2.2.1">
          <artifact name="maven-project-2.2.1.jar">
+            <sha256 value="24ddb65b7a6c3befb6267ce5f739f237c84eba99389265c30df67c3dd8396a40" origin="Generated by Gradle"/>
             <sha512 value="2c2a1bce069f9a5ad72d6c5525382529aa30875f09870b9c2b5afba86869c51e9d515d44aaa5d1d6761391e0173f5697cc46ba9d31df09c81c1afdb4b2c850e7" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1732,11 +2003,13 @@
       </component>
       <component group="org.apache.maven" name="maven-repository-metadata" version="3.9.15">
          <artifact name="maven-repository-metadata-3.9.15.jar">
+            <sha256 value="3d6245c893d452a89f606cf366f50bc84cc91da236f937c85d5f30db4aaeafb8" origin="Generated by Gradle"/>
             <sha512 value="3d40dbc3dfd4c571910628d5d71a94ebadc9fe249c1331877140c92bf7e4452610c11e6e0a4ebe78fc6ffe176fb83209920e15a6eb35269ad20d1130150ac23a" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven" name="maven-repository-metadata" version="4.0.0-rc-5">
          <artifact name="maven-repository-metadata-4.0.0-rc-5.jar">
+            <sha256 value="f40eefbc6e081491ad2acb4bae1fb1cffdd31ebbfc1d3c02a698ae15b80f9234" origin="Generated by Gradle"/>
             <sha512 value="ca60d84d96938f367acea4d63d60817248cc8ba21e5cb26297b72127c20cfcde234ce0616c0af3075bb45138b280cead482ea08628bf691a229992fffe7134e9" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1752,11 +2025,13 @@
       </component>
       <component group="org.apache.maven" name="maven-resolver-provider" version="3.9.15">
          <artifact name="maven-resolver-provider-3.9.15.jar">
+            <sha256 value="194195fb2a0075aded42b6d4632da95d6574877371c17ac7614e894f5bfe9114" origin="Generated by Gradle"/>
             <sha512 value="f18023f2dfe3662f888985e4b62f5a501324d941ffd897fcaacb82f220e63a3150283c1f33a499b8aa8ba1cd61d7500acd2b4b3f0f08eccb83384e1344fc0fa8" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven" name="maven-resolver-provider" version="4.0.0-rc-5">
          <artifact name="maven-resolver-provider-4.0.0-rc-5.jar">
+            <sha256 value="2579f8cc57a3ced2c3a032227df07939b259fe7d6cbc71415b9f187947dbd6a4" origin="Generated by Gradle"/>
             <sha512 value="00e1bab45647357d76d8f556facb52496aef3b8924b212bf41bd994ce1f0752b3e9d8c534328294a4c9d0f29c75dc7f262e4a8725513e20fabc5a5f75153d4b8" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1772,6 +2047,7 @@
       </component>
       <component group="org.apache.maven" name="maven-settings" version="3.9.15">
          <artifact name="maven-settings-3.9.15.jar">
+            <sha256 value="8219041d9e23043e349c2b330093be304b0f15b7be7b1ce3be0b09f170fd98af" origin="Generated by Gradle"/>
             <sha512 value="5751b53bda2b02d10ca2ca5d7d6631dea2865020a100425d487b3a7412c3ca9a20686fba04cdd9a32051b421bf9542ec448cd3a651e13e73b76dce91e6475376" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1787,31 +2063,37 @@
       </component>
       <component group="org.apache.maven" name="maven-settings-builder" version="3.9.15">
          <artifact name="maven-settings-builder-3.9.15.jar">
+            <sha256 value="3614a2331ec4ba14297cfd6834649816b89c1e85ad92148822a756d6204cc33a" origin="Generated by Gradle"/>
             <sha512 value="314959b09ff036e7ab725a5eda93eb5fb37cbefa99a86f29a4f7f2dd69c352981bd385104d2eefe8d5e31a6a3460f8eb7f62f0e30910dd5a674234b7b81c9b21" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven" name="maven-support" version="4.0.0-rc-5">
          <artifact name="maven-support-4.0.0-rc-5.jar">
+            <sha256 value="8aa38846ab0aba23d72e4afcd71ec13e65e0b979255a6e7946338d4586600b65" origin="Generated by Gradle"/>
             <sha512 value="10b923b10af571a5ecc4d5c7988dbadb3accca5100af1f45f9df39f38f15372cf2f1a6ed6a551a812d7b2400b293ec3d66a5d41fda1eaf4aed57ecce1c4af0a0" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven" name="maven-xml" version="4.0.0-rc-5">
          <artifact name="maven-xml-4.0.0-rc-5.jar">
+            <sha256 value="a4b7ad3e3410e0feb6438ebb6231c8e02449cd02fcf6451baed820008a103564" origin="Generated by Gradle"/>
             <sha512 value="a6c8648bdb13e38241fca24f0d14b807daf26d9fc3b5b5d00685e6f1f63a4392d6b42c37468401dde2d9ce512603b9282c6d5fa377651efec6dc8ab655f867e3" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven.doxia" name="doxia-core" version="1.12.0">
          <artifact name="doxia-core-1.12.0.jar">
+            <sha256 value="5e49cd827bebbcea5829d3b3883d17ad1ce15ebd6394aeb50ad50d7dfd939fcd" origin="Generated by Gradle"/>
             <sha512 value="d42f47501666f9618355be35ae762fce2c5bb1e24fdc79e1571858748d2f0c2e18d4c577b4ec2aad8258e805411e628f192e783c8ca5bba918b9ab924f3af8d5" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.apache.maven.doxia" name="doxia-logging-api" version="1.12.0">
          <artifact name="doxia-logging-api-1.12.0.jar">
+            <sha256 value="985306162c0a9f4c309d46109447f30f02bf6fc9bc16a3e039d59e1dabd0192f" origin="Generated by Gradle"/>
             <sha512 value="3e1b7491f18e5a8a96179f8f7789fe848e74433b75fc0494f7de912271042dd5f93abfabb9dac14357e4b340b0bc1e64b6303ea2c2f466084d6daab36645f985" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.apache.maven.doxia" name="doxia-module-xdoc" version="1.12.0">
          <artifact name="doxia-module-xdoc-1.12.0.jar">
+            <sha256 value="e8731ba00a4edd34b20eff9e4a729c2045c62cb796c3e491692607de4476ab01" origin="Generated by Gradle"/>
             <sha512 value="468c642cf199d22c59e222b6a38de744b5e08ce5306e72738c28f3e2e46cb93a3994250e9da8d5406c1603f0e8f3370acab1dadeafb7bcb4f268f802d506a3cb" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
@@ -1822,11 +2104,13 @@
       </component>
       <component group="org.apache.maven.doxia" name="doxia-sink-api" version="1.12.0">
          <artifact name="doxia-sink-api-1.12.0.jar">
+            <sha256 value="5dca6aaaa9e70d8a0766e143ddcf9db09de5fde0fbcc78cb635d74e764dfcca5" origin="Generated by Gradle"/>
             <sha512 value="0a53e355c5bcf5dead379643f66f95a4d1987cc7a40cc47c8aa9cdf1db04b70dc5bf6fa97b4b204b250b04a0b353da8ad2e12cbee163ada0ecdea604d54e012e" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.apache.maven.plugin-tools" name="maven-plugin-annotations" version="3.15.2">
          <artifact name="maven-plugin-annotations-3.15.2.jar">
+            <sha256 value="979d3cf8f4ac804cc27d2f8a6db07f2149d58ccd59bb3d589cc46bb9a44c0b4b" origin="Generated by Gradle"/>
             <sha512 value="201b5e7bb625cb9721d985e84c0cca2e11a83c79df7c26eeb6bca6c8c2d34f387a645a95bc4fea705b16a7d3750a1a889e003918b69cbcd4c13e921fd87ab4a0" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1843,6 +2127,7 @@
       </component>
       <component group="org.apache.maven.resolver" name="maven-resolver-api" version="1.9.27">
          <artifact name="maven-resolver-api-1.9.27.jar">
+            <sha256 value="a895d222283666a7320ddc76615e2e93a41fabd93ce9a6bf9ddee39272bb87b4" origin="Generated by Gradle"/>
             <sha512 value="23342a67383cd407e0cf8779783fe6d7a89bb72ecd79c6823419b08e27ac5b2b6e8bad2197e841dcf7fec1b53be3adea59432864d6f7b73dfd8938687a88dab8" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1851,11 +2136,23 @@
             <sha512 value="62364d8dac504ca96f71e0533337dd75e364933a0b3e01c78a16023c2ec9f3d37504965a6742ae2923f74238114e99277076306a45ee54e0d2a18b9eedcaa6a5" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.maven.resolver" name="maven-resolver-api" version="2.0.17">
+         <artifact name="maven-resolver-api-2.0.17.jar">
+            <sha256 value="b6b8b3c9251bc5938c9ebc5d54176d525986fc4a202f7dfa07f7fb58fc360b94" origin="Generated by Gradle"/>
+            <sha512 value="c0ac14e2e2b3d2e59f934ab4e9ce201706b4c268097e44552ebc7e0eec243eb164d10590d9d9ae608e50de6ecb2c82695187f5ed3ae170c93e99cadbff5090c5" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.maven.resolver" name="maven-resolver-connector-basic" version="2.0.16">
          <artifact name="maven-resolver-connector-basic-2.0.16.jar">
             <sha512 value="77f3f964ec9a4e8fe4535a70646e5095d5df0e4db46cb9ad771de5dd4759fdc7006cf08eecd03c46d87842a93eaddc9e693e37d58771a0e90a649ca523f49f59" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.maven.resolver" name="maven-resolver-connector-basic" version="2.0.17">
+         <artifact name="maven-resolver-connector-basic-2.0.17.jar">
+            <sha256 value="9e040b69c1f2e5a5e9e9e7d219119838ab5af8fe8c8186370665a53886563d79" origin="Generated by Gradle"/>
+            <sha512 value="ba6740a7ead008b9d29df1c98ed48cae430c081dd6c8a785abf5b043a6ffe466548eec15ac9207ee711b5fec1dc3707b3be63569e881623e196cde8894953dbd" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.maven.resolver" name="maven-resolver-impl" version="1.9.25">
          <artifact name="maven-resolver-impl-1.9.25.jar">
             <sha512 value="e14faef7048ced5695adf5aba5cf0f74619a827c1be862f0fce9c3ed74d7f727c4311077079ca156a2e3f885eedd71edb784d843cbfc7bacddab72851acea77e" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
@@ -1863,6 +2160,7 @@
       </component>
       <component group="org.apache.maven.resolver" name="maven-resolver-impl" version="1.9.27">
          <artifact name="maven-resolver-impl-1.9.27.jar">
+            <sha256 value="295d48ea2a8bb3aef51888967f105fb6251997d111f13c32d28919fd9b1c951e" origin="Generated by Gradle"/>
             <sha512 value="c0a7e7366f9acc2a4398b3f8f52102062899fc48b583a1e8c5928780269098f4f2b4aa955dd8161374bf4d36f221d8b20f9fc98e9417f6fec1afa43013decda1" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1871,6 +2169,12 @@
             <sha512 value="5811b7dfefdbe02fece1e79b144d2e9f7554918ab284653d937be408883963b8a5bd9f112431b7807ed44725cc4e766524cf65ba46b8ce2fdce215de766fd1be" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.maven.resolver" name="maven-resolver-impl" version="2.0.17">
+         <artifact name="maven-resolver-impl-2.0.17.jar">
+            <sha256 value="02b2ba47d3907df94791209c9c9130cb8bd05d6f07ff56364a37ab1ad527a6ac" origin="Generated by Gradle"/>
+            <sha512 value="99589573102290ab7ab4a367190a8af173e08e0b4bb61d4d6a7ae8c124b906ca009f5693af9115aca0875b5848e23e5dd3098b9183727bc4425f2b62a136d5dc" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.maven.resolver" name="maven-resolver-named-locks" version="1.9.25">
          <artifact name="maven-resolver-named-locks-1.9.25.jar">
             <sha512 value="8b720ca883912e3347beb0194cb2e9205ffca6e3a2583ac386dd74b49d99256965662b5b705afbdced1b16a9b55ed15abb6a4e57aca159ed39c2a8e3b067294d" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
@@ -1878,6 +2182,7 @@
       </component>
       <component group="org.apache.maven.resolver" name="maven-resolver-named-locks" version="1.9.27">
          <artifact name="maven-resolver-named-locks-1.9.27.jar">
+            <sha256 value="b39ecd4da98fdac5068e6f5d16910a71f4e4d48e95e17d107f6603e18f2b3fdf" origin="Generated by Gradle"/>
             <sha512 value="923355fee36ecb724b80dc55d6134070bd511bc07291bfb51787b4ef7c25495fb271d669f6b9640894edc93d4d56a0bfa2e8b6b5d0a8372f400ea2818088db63" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1886,6 +2191,12 @@
             <sha512 value="364e6d16b57b842b4ac7ef68f255105a29d5c50ffee8f25b63a6f39a973168121d4d570b406ba230aa93d8a31b3d8882bb81a1e7c50392b7fc9a6ca146038a0c" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.maven.resolver" name="maven-resolver-named-locks" version="2.0.17">
+         <artifact name="maven-resolver-named-locks-2.0.17.jar">
+            <sha256 value="89791185a5c5dd37efaa7b8a7b3c7e65e60b5b6f4a0e5d5f4a91f13d7116f209" origin="Generated by Gradle"/>
+            <sha512 value="aef5e696d07016033cafae7673ae3d6e9c9581e5866a44cc66f74e6ad1ac68ee732a908d391572c9e925d11d29efa45e8889d42d0448c9c743569765e7bc85ee" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.maven.resolver" name="maven-resolver-spi" version="1.9.25">
          <artifact name="maven-resolver-spi-1.9.25.jar">
             <sha512 value="b51bebeedaa51ad3703b84a5505046eed3fbe94ed6568c3f73990c1b797cab219b710ac6d824c398cbead0ce430aaac608431477df4ba067d68173102af0d892" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
@@ -1893,6 +2204,7 @@
       </component>
       <component group="org.apache.maven.resolver" name="maven-resolver-spi" version="1.9.27">
          <artifact name="maven-resolver-spi-1.9.27.jar">
+            <sha256 value="1cab02f45bc58d5f4d8e084eaf032f13ea1a5fc9021d8bd74f8360ebb6593e5a" origin="Generated by Gradle"/>
             <sha512 value="d619d26d5608dfccb56bb253fc4524e716fe28959a2ef4956ab004f0fbb65f7687cfee485e5e967b3b9121c01cf8027dfb7061dea89e3b43d8977533778ef21d" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1901,21 +2213,45 @@
             <sha512 value="5be9dc080cbb4fbaac0cb13eda275280cf85081bbb080726612d69187597ba682cdb881553421a81985bea6fb45c0ca3fcd34034d80d4e36dc9565d1aa5e958a" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.maven.resolver" name="maven-resolver-spi" version="2.0.17">
+         <artifact name="maven-resolver-spi-2.0.17.jar">
+            <sha256 value="b5aff5c347cac120d128bf527fef38680dffec5c046af411cd91251369b9d2fd" origin="Generated by Gradle"/>
+            <sha512 value="2cb4c17e77d1d764870a2837606d0b479cf8c17835cfd807101f77a5a820f5a3fd8ad63a7859591c2bc375974ff06e207ccf152c299dfcbd859e3a4f48e1cff5" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.maven.resolver" name="maven-resolver-supplier-mvn4" version="2.0.16">
          <artifact name="maven-resolver-supplier-mvn4-2.0.16.jar">
             <sha512 value="1d0ffd34f121dd0da6eb376dcb93879606beeaf5d322c416713365c089c706932c167a34d0f4b421d7732e61d6b4659f9c6a2959a69492290351ca25a0a82a8d" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.maven.resolver" name="maven-resolver-supplier-mvn4" version="2.0.17">
+         <artifact name="maven-resolver-supplier-mvn4-2.0.17.jar">
+            <sha256 value="c0591b886a45fef3fe6a329deddaa35579ccd73075612ca646333753ed4abc96" origin="Generated by Gradle"/>
+            <sha512 value="e4cf960cfddfdbb80c0e17e93282b8428570d1fd4719192c0c136b654cb590b9a6f7e3535ac140f8e38924662a6e4a714a20ae14e34f368992686443f6ef82ea" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.maven.resolver" name="maven-resolver-transport-apache" version="2.0.16">
          <artifact name="maven-resolver-transport-apache-2.0.16.jar">
             <sha512 value="d9ea568b2299e788fa6b8b124ab7fb3603d94d7e0ed4f7905f93a26703d1c33970022a35a79124fa61eeb4fc9c69caf411780ebe125ff17bd469c698e3521aea" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.maven.resolver" name="maven-resolver-transport-apache" version="2.0.17">
+         <artifact name="maven-resolver-transport-apache-2.0.17.jar">
+            <sha256 value="27d97b53501489ea6da390e62f24a5e98e7ea3e7aebdf61dd12d9132e824c2b6" origin="Generated by Gradle"/>
+            <sha512 value="1bf9a81329dac4181f3c291553306399dde14418d1e818562851f85a2af7b58ea4486e52cf45ea6d6f566f8eba9f746df127680aefaa1e4b93ef8221f0489afd" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.maven.resolver" name="maven-resolver-transport-file" version="2.0.16">
          <artifact name="maven-resolver-transport-file-2.0.16.jar">
             <sha512 value="d0ff675aa7c8409534d822ca9bcf92bff4ecc77f38ebc0114cbdf269ed28ad74e205b8f3e34aee151e0eb9604bf75f1994e09b502865ea22517a419b67724ea5" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.maven.resolver" name="maven-resolver-transport-file" version="2.0.17">
+         <artifact name="maven-resolver-transport-file-2.0.17.jar">
+            <sha256 value="8309ff1d319163ecbd2f80355408fae2407b81d4cbc3f6d2cb7b153e64620939" origin="Generated by Gradle"/>
+            <sha512 value="0e0c86248e3cce9659e275405f9cb6c55131b739ce177fab9ba41c7534df7f7eb14725da3f8455b007dbdd2d7d8e8e7fee2d13a8511a46130f702d636eab4cf4" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.maven.resolver" name="maven-resolver-util" version="1.9.25">
          <artifact name="maven-resolver-util-1.9.25.jar">
             <sha512 value="785dffddf7bca8acac5bdea37791688e4abdf381183bc9b495936c590a30b800fcca82f94915b85141294526b0efbaad20560a8894a441de07c59e27c25ccc59" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
@@ -1923,6 +2259,7 @@
       </component>
       <component group="org.apache.maven.resolver" name="maven-resolver-util" version="1.9.27">
          <artifact name="maven-resolver-util-1.9.27.jar">
+            <sha256 value="74a12548f0d6aad13c728666288c1e81201c24bd05bb4e4ec8c1558517b379a7" origin="Generated by Gradle"/>
             <sha512 value="bc6519e69dab8918a17516fcd1b6d1d3c48bbe36f5fa2d542b9b7808df18775e708f011f4fa2be7c2cddf4e6a421fb3ca7c700b9821657ca99b9472f947d3663" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1931,6 +2268,12 @@
             <sha512 value="2492e88533bcf4bfbebf0959cb46f111a18bbcf0fcb8c419f10d67dcd90a6691ba588541a353a7140f68b8d41417fd13943687bc468ec8acb5a73f4fd1ae12b8" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.apache.maven.resolver" name="maven-resolver-util" version="2.0.17">
+         <artifact name="maven-resolver-util-2.0.17.jar">
+            <sha256 value="0c77ef8ee2097d692d627eea8d835b0b517a504e1613d95e0bfe3bf4b04aaec0" origin="Generated by Gradle"/>
+            <sha512 value="2d61d622398f85ed7eab08a3a865db980041cb3cd2b668295f58ab91f638033b72a06c244a01e325e519c4ec5f4f948764686711fe8739c8462662bbab5adc9f" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.apache.maven.shared" name="maven-filtering" version="1.1">
          <artifact name="maven-filtering-1.1.jar">
             <pgp value="82F833963889D7ED06F1E4DC6525FD70CC303655"/>
@@ -1940,11 +2283,13 @@
       <component group="org.apache.maven.shared" name="maven-filtering" version="3.5.0">
          <artifact name="maven-filtering-3.5.0.jar">
             <pgp value="88BE34F94BDB2B5357044E2E3A387D43964143E3"/>
+            <sha256 value="7adb0e46b5fff4fc03aab4baafbdee0b29e444cffe4478858c63082d497220bf" origin="Generated by Gradle"/>
             <sha512 value="2b0c38bf43ec1208a8d641bc8704d42f26af03af98b5a791f00f94d019517512704d877463948c6961ff1f545f8ec133681aded2fdd9245e300c03d71ed43af2" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.apache.maven.shared" name="maven-shared-utils" version="3.4.2">
          <artifact name="maven-shared-utils-3.4.2.jar">
+            <sha256 value="b613357e1bad4dfc1dead801691c9460f9585fe7c6b466bc25186212d7d18487" origin="Generated by Gradle"/>
             <sha512 value="71db8a485a6436cb305276ea9d748f578e1a8ffa1346c8570f7038684ce53d320584174634aeffa1b51629af0171a2d6572854eb07236a83236ad1d9949988e9" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
@@ -1965,6 +2310,7 @@
       </component>
       <component group="org.apache.maven.wagon" name="wagon-provider-api" version="1.0-beta-6">
          <artifact name="wagon-provider-api-1.0-beta-6.jar">
+            <sha256 value="e116f32edcb77067289a3148143f2c0c97b27cf9a1342f8108ee37dec4868861" origin="Generated by Gradle"/>
             <sha512 value="cdb87b1a62c612ee5225a4ef6813b2cfd603de3a941f022112b17647e48e895717cd1c85d6e419362810b22e4ba3e6ff35c645e6caaa32659649f21558640eae" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -1985,18 +2331,21 @@
       </component>
       <component group="org.apache.tika" name="tika-core" version="1.1">
          <artifact name="tika-core-1.1.jar">
+            <sha256 value="6b7f1c020734288e05044841b3dc5ff642e8799cc16a2279b5e3b526287cb5ff" origin="Generated by Gradle"/>
             <sha512 value="f5b40a00293ce54f316a384a54dbe7e9c0e9b0684115862a91102dd9d3d23b6643cc8b60ca3f19adc6b171155ac04d612b99f8fe5376187ba0319fb845980e2f" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.apache.xbean" name="xbean-reflect" version="3.7">
          <artifact name="xbean-reflect-3.7.jar">
             <pgp value="223D3A74B068ECA354DC385CE126833F9CF64915"/>
+            <sha256 value="104e5e9bb5a669f86722f32281960700f7ec8e3209ef51b23eb9b6d23d1629cb" origin="Generated by Gradle"/>
             <sha512 value="bf85e1c95a7362eea675e1bd972b59f76cf63e15d12f7ee555860596aa5b17aee16835b5a60a3480f12baaa8e136909c9b775c5d779f3938ac6571d103cb2a2a" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.apiguardian" name="apiguardian-api" version="1.1.2">
          <artifact name="apiguardian-api-1.1.2.jar">
             <pgp value="FF6E2C001948C5F2F38B0CC385911F425EC61B51"/>
+            <sha256 value="b509448ac506d607319f182537f0b35d71007582ec741832a1f111e5b5b70b38" origin="Generated by Gradle"/>
             <sha512 value="d7ccd0e7019f1a997de39d66dc0ad4efe150428fdd7f4c743c93884f1602a3e90135ad34baea96d5b6d925ad6c0c8487c8e78304f0a089a12383d4a62e2c9a61" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
@@ -2116,10 +2465,13 @@
       <component group="org.bouncycastle" name="bcprov-jdk18on" version="1.84">
          <artifact name="bcprov-jdk18on-1.84.jar">
             <pgp value="7B121B76A7ED6CE6E60AD51784E913A8E3A748C0"/>
+            <sha256 value="64d6c5a6121fcd927152dd182cbed39afe0fda641a970d9bcc0c9cb1858b2731" origin="Generated by Gradle"/>
+            <sha512 value="4b7e5696830023bad1594d9f9766898f78018ec7d6ec34de23f2a6683b02803b92ffe8ab5d21f1a717eb4fafa8e22dcf3a4b6dd275bd86c7cb02609987fe92f5" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.brotli" name="dec" version="0.1.2">
          <artifact name="dec-0.1.2.jar">
+            <sha256 value="615c0c3efef990d77831104475fba6a1f7971388691d4bad1471ad84101f6d52" origin="Generated by Gradle"/>
             <sha512 value="d4cd2b33f7c358012ff01db6a13ebfe1e8051a580698bffcd942c47451012cf53ce49a400b1c8bf7502b01e631d79d7c6417202a145622572d79fd145ccde61a" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -2135,6 +2487,7 @@
       </component>
       <component group="org.checkerframework" name="checker-qual" version="3.52.1">
          <artifact name="checker-qual-3.52.1.jar">
+            <sha256 value="934641a18c8461bf66d7e939b2b054bf2a518ed4188fd7d6836a65b038f5364a" origin="Generated by Gradle"/>
             <sha512 value="ded69c9467955169ca6f80d0b50911ed89261c1b515ad8ddd506641f05c47767fa3fab64843949afe7cc90c89cc3d5f927e4bbad8412fc1b6608e62eaefe95a3" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -2152,22 +2505,26 @@
       <component group="org.codehaus.mojo" name="animal-sniffer-annotations" version="1.9">
          <artifact name="animal-sniffer-annotations-1.9.jar">
             <pgp value="150FDE3F7787E7D11EF4E12A9B7D32F2D50582E6"/>
+            <sha256 value="cd96feeb47f34b2559704715db7b179a03a3721f9dc4092c345c718e29b42de4" origin="Generated by Gradle"/>
             <sha512 value="356031c835d382badbec0f9ee246e32510e62b932721b31165397f2cc04a72108365967e241809ec6d190de5628ce34a61803266fd3270126e388496c10c5ec6" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.codehaus.plexus" name="plexus-build-api" version="1.2.0">
          <artifact name="plexus-build-api-1.2.0.jar">
+            <sha256 value="570ae55a95e1887c3004882d30dc4e9035d2a46ba8d58b991de04175f141d88f" origin="Generated by Gradle"/>
             <sha512 value="387c5b5b0ffef5129a758ee2ceb0db8a2d37d4110e91b889a79a09d7ec850301d4fa1cc3c55f661a91cac9265de606a53911193840f2626ccc4da2bea13ddea7" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.codehaus.plexus" name="plexus-cipher" version="2.0">
          <artifact name="plexus-cipher-2.0.jar">
             <pgp value="6A814B1F869C2BBEAB7CB7271A2A1C94BDE89688"/>
+            <sha256 value="9a7f1b5c5a9effd61eadfd8731452a2f76a8e79111fac391ef75ea801bea203a" origin="Generated by Gradle"/>
             <sha512 value="8f187b07867a7c29d77454aae4b76479300238d9c4e777c1afa2aebe33b88dab916e29111dd55acac1341849f4579fe91a5470fdd45ccba0e05709c2ce3a1d65" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.codehaus.plexus" name="plexus-classworlds" version="2.6.0">
          <artifact name="plexus-classworlds-2.6.0.jar">
+            <sha256 value="52f77c5ec49f787c9c417ebed5d6efd9922f44a202f217376e4f94c0d74f3549" origin="Generated by Gradle"/>
             <sha512 value="6a58048d9db54e603b9cfd35373cf695b66dd860bec878c663b4fc53b6b3d44dd5b0c92e7603654911b1f78e63ef277cf6b272fe069a360989138550545f274d" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -2178,27 +2535,32 @@
       </component>
       <component group="org.codehaus.plexus" name="plexus-classworlds" version="2.9.0">
          <artifact name="plexus-classworlds-2.9.0.jar">
+            <sha256 value="1ad3292cd563381e3fd632f3fded1988f9e9b2be7a9f3db63ff4c4cedba13fa5" origin="Generated by Gradle"/>
             <sha512 value="a99e92782658ed20e1d01b0ae426882d481a4ba91de3f6c058a24aa54ebded654f4b16dc26adccafd61f27ce22329a1ae1db935c4b49ee31734bcb775e6c7fd7" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.codehaus.plexus" name="plexus-component-annotations" version="2.1.0">
          <artifact name="plexus-component-annotations-2.1.0.jar">
+            <sha256 value="bde3617ce9b5bcf9584126046080043af6a4b3baea40a3b153f02e7bbc32acac" origin="Generated by Gradle"/>
             <sha512 value="cc534fda54272f074fe9edd581a6c3e1ea98127340c7f852c4b4953a44dad048ace22dfa10f30d6adcdfc15efd319dac778a03ebbe20de7779fd1df640506e88" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.codehaus.plexus" name="plexus-component-annotations" version="2.2.0">
          <artifact name="plexus-component-annotations-2.2.0.jar">
             <pgp value="BA926F64CA647B6D853A38672E2010F8A7FF4A41"/>
+            <sha256 value="50edb93c73786e62822b4fe1336e22880fdf147191373cf5c911370e16748fcf" origin="Generated by Gradle"/>
             <sha512 value="33595f37df5b5f11a863082e2ef90d871f52bc6c83fb593b0747a4c7eb91c3b5ab9bfe804a54b7d82ee6f289e2d47c443c8dafe4159d07b6c80394a5666db2f6" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.codehaus.plexus" name="plexus-container-default" version="1.0-alpha-9-stable-1">
          <artifact name="plexus-container-default-1.0-alpha-9-stable-1.jar">
+            <sha256 value="7c758612888782ccfe376823aee7cdcc7e0cdafb097f7ef50295a0b0c3a16edf" origin="Generated by Gradle"/>
             <sha512 value="7cb690f7d8e07da36f019b9853cc924c513c254037abdb11b2b77d26df886b94468332f59008de6cafbc18bae102617df7877a68159717fbcdb1fae932b67f5b" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.codehaus.plexus" name="plexus-container-default" version="2.1.0">
          <artifact name="plexus-container-default-2.1.0.jar">
+            <sha256 value="6dceb1246b188153bdcb6f962d543d51ddb672cca07cad94a78fbabc9edf0a39" origin="Generated by Gradle"/>
             <sha512 value="5e49a1635e2a9ec134199f688d741e2c1889d9de93f88e8901a32ecd84eb2a8d7d8a1529035381a4e43857d2bc26703377eabec036f9b5239ef1890d521a5ee0" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
@@ -2209,22 +2571,26 @@
       </component>
       <component group="org.codehaus.plexus" name="plexus-interpolation" version="1.28">
          <artifact name="plexus-interpolation-1.28.jar">
+            <sha256 value="ab2a8715570438a2e4164d85ad3e8d489eabc38ea5093c2eb8ab7f58403535b5" origin="Generated by Gradle"/>
             <sha512 value="3684e8d20c9bd83082b053a69129e6b7192d78a14f17a02942236fcb254425b36b0eb6b31f78c86f06d6f83f50b77bc1767cc3c46ced172db801ecb9750b6502" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.codehaus.plexus" name="plexus-interpolation" version="1.29">
          <artifact name="plexus-interpolation-1.29.jar">
+            <sha256 value="088d444dbcedfb384630d8686697ece3c401d6f33c8f8b3aa7259ea1c6996878" origin="Generated by Gradle"/>
             <sha512 value="db3b91d130c37d4b9a2c2e6743ee87d8c60e50a61ecb6efb38b548f496de27ca10898c85d61e5a598dab2655889603d1f6396c506bcdc61203d4ef4140177289" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.codehaus.plexus" name="plexus-sec-dispatcher" version="2.0">
          <artifact name="plexus-sec-dispatcher-2.0.jar">
             <pgp value="F3D15B8FF9902805DE4BE6B18DC6F3D0ABDBD017"/>
+            <sha256 value="873139960c4c780176dda580b003a2c4bf82188bdce5bb99234e224ef7acfceb" origin="Generated by Gradle"/>
             <sha512 value="ad4e814c8baff780a4eee064903e52b09ae00420a59fb075ef72dbb8d64d12d3d5009b03d56c15f93587d931c3a7f06cad6351ab2dc9415ccc6eeab0daebeb07" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.codehaus.plexus" name="plexus-utils" version="3.3.0">
          <artifact name="plexus-utils-3.3.0.jar">
+            <sha256 value="76d174792540e2775af94d03d10fb2d3c776e2cd0ac0ebf427d3e570072bb9ce" origin="Generated by Gradle"/>
             <sha512 value="a93038005cd9793476c913beaea7c8c170d1853dddf39bf6794ad6446165eaf538c2c3c2314baa9d919d6b0bda78e5ea3cd987d5dbacf8e3b98e315bcfa7db64" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -2235,29 +2601,34 @@
       </component>
       <component group="org.codehaus.plexus" name="plexus-utils" version="3.6.1">
          <artifact name="plexus-utils-3.6.1.jar">
+            <sha256 value="05a63effd67e2d6b9d610cc82e2bd7473289d34802e57a529b28110f28af5679" origin="Generated by Gradle"/>
             <sha512 value="cdf52ae14e19fbc040a8ce9eb56f25fb6f3c1c2703b8cb7815329f06f675a284934e4fb19acedb49a24abc8ba28493fd5aedf15f0ac8033d123c71620de0ac98" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.codehaus.plexus" name="plexus-utils" version="4.0.2">
          <artifact name="plexus-utils-4.0.2.jar">
             <pgp value="073F7A9345756F3B40CDB99E6C70A3B7599C5736"/>
+            <sha256 value="8957274e75fe2c278b1428dd16a0daeee1dd38152cb6eff816177ac28fccb697" origin="Generated by Gradle"/>
             <sha512 value="a99751d7990df50fd1adc10634c4e14f5deddff8fc1b7c6d26a5c7fc517d3f0e3a8d39435c512c507a0737fc9c3ee67a8f121f9e2aa8b9bfe14d9f01a99a3aa6" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.codehaus.plexus" name="plexus-utils" version="4.0.3">
          <artifact name="plexus-utils-4.0.3.jar">
             <pgp value="0181A4828FA27B6BE6F1F5A68611CD28F472E006"/>
+            <sha256 value="421ff6ed146c53a9d4eaade8f629b52b12af7187101f1bd06c2c64e904019f3c" origin="Generated by Gradle"/>
             <sha512 value="ed864c502a54ab2e8e2d4c74479b1cb48c5e44ee56fcad6ba5aec9e20e3e765148299cb8eb8c9a516fb59bf836b12886caca00a9b12eb5cb036271df3437218d" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.codehaus.plexus" name="plexus-xml" version="4.1.0">
          <artifact name="plexus-xml-4.1.0.jar">
+            <sha256 value="86e6a7f07484e8b1f7af66d97d3ba3cb3d692a5461b4b1d0a2b7670cf5748e89" origin="Generated by Gradle"/>
             <sha512 value="c183471d1b9bbb1b0685b1d205a3ab02a2199b725e72257213551d709857d1630319d3cc58b2bf586c7b55f55eb7112e4d54a03ac34a00e3a7d0636eed780292" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.codehaus.woodstox" name="stax2-api" version="4.2.2">
          <artifact name="stax2-api-4.2.2.jar">
             <pgp value="28118C070CB22A0175A2E8D43D12CA2AC19F3181"/>
+            <sha256 value="a61c48d553efad78bc01fffc4ac528bebbae64cbaec170b2a5e39cf61eb51abe" origin="Generated by Gradle"/>
             <sha512 value="1c0587ecb4c5a659ce2ae1fe36ffc12636a8ecba549a29f2cf91cb4d1d36a335c05f35776f480488d40d894230389f76aeeb363887026c6ef5c565995c17b7c6" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -2275,32 +2646,38 @@
       <component group="org.codenarc" name="CodeNarc" version="3.7.0">
          <artifact name="CodeNarc-3.7.0.jar">
             <pgp value="851264C36365D4FF9427625F38362FD5CFA2668B"/>
+            <sha256 value="e44eb49081d703c5c10668c6380d98b9df9a25066918b8d6de5a40d4a242d35c" origin="Generated by Gradle"/>
             <sha512 value="50cc6a6ae143ce6a7e42d21d7fc049a252c63ee8f1cb7ceff6a7a97bc4a0f4b4dda646d108e175b7fe2eaa3214b04c75672c6abee7fafb5b587809a916500215" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.commonmark" name="commonmark" version="0.28.0">
          <artifact name="commonmark-0.28.0.jar">
+            <sha256 value="f8b28e00f97c568329ee1b2496cfec5c3ef8664b565ea09cf8988894183b956d" origin="Generated by Gradle"/>
             <sha512 value="cd4ee2b918de001ab4ff09c3ee9d3b0d38c3566116a6755080a0cb5f0a16a9557ccc9530a1f20e8c71b43b4b37cce8667dcc8d12cb389fcde11193456e65ef77" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.commonmark" name="commonmark-ext-gfm-tables" version="0.28.0">
          <artifact name="commonmark-ext-gfm-tables-0.28.0.jar">
+            <sha256 value="80439c7c4809daa6c35ccb260f48f8b71cda30e8cc923dbd68bb3be049359ecb" origin="Generated by Gradle"/>
             <sha512 value="62010f1ad2301d554116ef08f97b818594a705729bbe5cbc1b8623dda1700ce23c6a7f5333496ba02130e90d473b586276cc447d1331907d4899ee06315a0957" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.crac" name="crac" version="1.5.0">
          <artifact name="crac-1.5.0.jar">
+            <sha256 value="f4426e1641c8f0fa2f025a4cd7c40c285abaf265930e6717adfcaef03d034850" origin="Generated by Gradle"/>
             <sha512 value="062f49bbabcf2d56e171ff988d21437fbf98b1734b3704bfdcfbcca98fadfbb10e9bfbae6d3f74f1bf04e9190cfe87686174b30f8c58592f9721fdef8827c99d" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.cyberneko" name="html" version="1.9.8">
          <artifact name="html-1.9.8.jar">
+            <sha256 value="b331cbea6dec1e269e383efecce97fa1655d40246e4671103e566bcacb2b55a0" origin="Generated by Gradle"/>
             <sha512 value="40ef78b2394c6495604bc0f7a82ba492a3f0cb26127d8c917da42066f57328587caba84b10679be9a06991af7aab454bb482cd92393ecd67f0d71779337670cd" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.cyclonedx" name="cyclonedx-core-java" version="11.0.1">
          <artifact name="cyclonedx-core-java-11.0.1.jar">
             <pgp value="DC61AE5DFD409C64F592AC1A6FD54E1F311B47E9"/>
+            <sha256 value="989348cc6d385629a3ccb735d450b0f0f022167cb702c2fcb0e6f2bdd989dde7" origin="Generated by Gradle"/>
             <sha512 value="20a3fee94682c23a57c52bdd1678f877f1b8f2a8c3a2e2aa1ade2be5e74c70da1171aa2f08af40a5a9362eba94fbb52d8a824b3bf6b9591d765ecf6b3c43463c" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -2311,47 +2688,56 @@
       </component>
       <component group="org.cyclonedx" name="cyclonedx-gradle-plugin" version="3.0.2">
          <artifact name="cyclonedx-gradle-plugin-3.0.2.jar">
+            <sha256 value="b886245a2f67bb58e8b89ed267a12ab4d0593ad2a4a38f510bed2970b135d9f0" origin="Generated by Gradle"/>
             <sha512 value="2b19146826056d184c189fe1e4e10cb9a9aaaef0635459675299f09a3b61f72d25bd68eabb95b65ae072671b4000167a4d9a735900754a98b19b9dfd0864532b" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.dom4j" name="dom4j" version="2.2.0">
          <artifact name="dom4j-2.2.0.jar">
             <pgp value="8F9A3C6D105B9F57844A721D79E193516BE7998F"/>
+            <sha256 value="3fae79e081096e1410645eb3557c63b79ca266d510ab479889511109becd1690" origin="Generated by Gradle"/>
             <sha512 value="9e69d8c53b82d62d6589d56c6861455963ac64ea1c74a73b2e677be5297c104ea1ac26eb871ac92f2ee54116b3011304481070ae21a570d3b241be1cc13390ab" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.eclipse.jetty" name="jetty-client" version="9.4.50.v20221201">
          <artifact name="jetty-client-9.4.50.v20221201.jar">
+            <sha256 value="b216e173d79c0adce1da3d0894abe418453851a3dc6cc5006e5d3003dcac88fd" origin="Generated by Gradle"/>
             <sha512 value="6ee2314eb4bf37c014c5ebc3b1508b97dd3a6517b7b41498f012fd1ffbd5602d57f74c8b895b841a7712b1285f62b5c49bdf7b2345d5367dee42f59855f3b9c2" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.eclipse.jetty" name="jetty-http" version="9.4.50.v20221201">
          <artifact name="jetty-http-9.4.50.v20221201.jar">
+            <sha256 value="3e3c569b9f39dbd1c9ae6d67e32512e072c50b4845866e941bcfd741e0ef5088" origin="Generated by Gradle"/>
             <sha512 value="a9e2d0bf955bd7dae294bde86b8488be4a8e384dd903e6c9833f6597621de488798412a30ee0d5279c67e8fa2334144a2d9633e680337e45330ab38d1ab595ad" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.eclipse.jetty" name="jetty-io" version="9.4.50.v20221201">
          <artifact name="jetty-io-9.4.50.v20221201.jar">
+            <sha256 value="dc51976bc91236279c82e9f1a51e82631562eea518e8654097d271b8dd0acb0b" origin="Generated by Gradle"/>
             <sha512 value="17e4a581789dd3398853ae89085a2c0e300ff6d9e029b763f52b13420b42bf5075cf72a4824e4e2a6b877e2260aa5db85f76fc450e3305a499d1079d9d06def7" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.eclipse.jetty" name="jetty-util" version="9.4.50.v20221201">
          <artifact name="jetty-util-9.4.50.v20221201.jar">
+            <sha256 value="38891b3480b582d1f2646cf94f33e1675bdc7c814657e1742424c98193c9117b" origin="Generated by Gradle"/>
             <sha512 value="c18e60c5359138be31dbe065005d02423a5f6af6d2ac6724c3656e2cc918d678b38f6c95ea56a97f40863fa04f02c65855a522f9847e65871307423cc736530a" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.eclipse.jetty.websocket" name="websocket-api" version="9.4.50.v20221201">
          <artifact name="websocket-api-9.4.50.v20221201.jar">
+            <sha256 value="cd64551abf8e5130b01f1063fe94d4c58df74f134bb684f0b9bed56196e85f1d" origin="Generated by Gradle"/>
             <sha512 value="f8e6536c37d97b378e678203cff1ab26a9fde701b4e66b751218937be444dc88ef1b76fd44f7b0262f3351f09511204b50f5d23637d8f589f244c33d0e252ef4" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.eclipse.jetty.websocket" name="websocket-client" version="9.4.50.v20221201">
          <artifact name="websocket-client-9.4.50.v20221201.jar">
+            <sha256 value="7f8d9861f87e59cbe1fd6beadeae0b32f1a7cc78ffccf2f13e8b4db9dd70602b" origin="Generated by Gradle"/>
             <sha512 value="e035fbdba27ce87854d46b29a757629790c2b083f6e25ccd9f9c8f1d2e80091b7f649dbe1063373b1b961c708fb064b833f8dddcbdf2f08413d82a981330b7fe" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.eclipse.jetty.websocket" name="websocket-common" version="9.4.50.v20221201">
          <artifact name="websocket-common-9.4.50.v20221201.jar">
+            <sha256 value="d6b8bba5e8864eaf98d853458403a75dc401c4858badf9d009941f402cc2671b" origin="Generated by Gradle"/>
             <sha512 value="1e71c38fda4f794a7753e38c79091b4156d50d5319bbdca1b5233b7aa8bdca86cad53d4402ad69da497f5ba695ecafc9954be8e7f6ca725a1c82d852fa8a199f" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -2367,6 +2753,7 @@
       </component>
       <component group="org.eclipse.sisu" name="org.eclipse.sisu.inject" version="1.0.0">
          <artifact name="org.eclipse.sisu.inject-1.0.0.jar">
+            <sha256 value="3ab8d7bfe68f3b6ec95c1a0a47e628edbc9d76e90634cb0a0ba121fbb11b8e42" origin="Generated by Gradle"/>
             <sha512 value="d13d6c8de524654c20cdb82c50131a4f5bc8b88244243927c2a1293fff1beb3eed04320997d2d6379d4db6e8dbd6026abf3a452b9fb4edf762c05b74559646b5" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -2382,6 +2769,7 @@
       </component>
       <component group="org.eclipse.sisu" name="org.eclipse.sisu.plexus" version="1.0.0">
          <artifact name="org.eclipse.sisu.plexus-1.0.0.jar">
+            <sha256 value="865b5300034fc08c790215d7d97f141914c932191bef9338a7dcef589f7536e9" origin="Generated by Gradle"/>
             <sha512 value="d7236718e1ede4f34d6f2ebaaa0b772370bf3c857a477cf80a7f6a08aa69312c3c53d2e4e3625d3d71906ae995921854b3687267cb52028f5528a3491bf1ceb2" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -2398,17 +2786,20 @@
       </component>
       <component group="org.glassfish.jaxb" name="jaxb-runtime" version="2.3.2">
          <artifact name="jaxb-runtime-2.3.2.jar">
+            <sha256 value="e6e0a1e89fb6ff786279e6a0082d5cef52dc2ebe67053d041800737652b4fd1b" origin="Generated by Gradle"/>
             <sha512 value="8a6cf3dd9fac4fb6ddb5f0861a2cac093e04d186fc787ee78c30862d225eb677b9605e1177cf57da0d4f45c613f107187c330be0684b43b0cab9a922cd96db66" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.glassfish.jaxb" name="txw2" version="2.3.2">
          <artifact name="txw2-2.3.2.jar">
+            <sha256 value="4a6a9f483388d461b81aa9a28c685b8b74c0597993bf1884b04eddbca95f48fe" origin="Generated by Gradle"/>
             <sha512 value="66c174093c47b75b900159c5449bd99eb15308d15b395771367adc5862612edb985c3678428c4f60e7c27b46d123afac39277f80db766511a6b6f0756d525559" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.gmetrics" name="GMetrics" version="2.1.0">
          <artifact name="GMetrics-2.1.0.jar">
             <pgp value="851264C36365D4FF9427625F38362FD5CFA2668B"/>
+            <sha256 value="2aa46be0478c46e921b2d9e699ae408ec82b5fc2516abecf56c42682ee2914b3" origin="Generated by Gradle"/>
             <sha512 value="f13b47b1ae01bdc2f1450d26728ef03029c138345313d8e389d7e470cd8f06ea9d47847a9053e896fe37d9114ea6d8fb4086febd5ee2d7f48f641dcfde4f3e3d" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -2419,38 +2810,45 @@
       </component>
       <component group="org.hamcrest" name="hamcrest" version="2.2">
          <artifact name="hamcrest-2.2.jar">
+            <sha256 value="5e62846a89f05cd78cd9c1a553f340d002458380c320455dd1f8fc5497a8a1c1" origin="Generated by Gradle"/>
             <sha512 value="6b1141329b83224f69f074cb913dbff6921d6b8693ede8d2599acb626481255dae63de42eb123cbd5f59a261ac32faae012be64e8e90406ae9215543fbca5546" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.hamcrest" name="hamcrest" version="3.0">
          <artifact name="hamcrest-3.0.jar">
+            <sha256 value="5d66b6a4a680755cb6ed7cb104fa7835ef644667586ff0737adeb977c39ecdbc" origin="Generated by Gradle"/>
             <sha512 value="c09968882d8467d43576444b3fab868e175f0826e1d6e2015d1efec8934cdd5ffce8f285a7fc072306711ee0645dea92783a97a9e1dd8206e5e1de5de1ea8e7f" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.hamcrest" name="hamcrest-core" version="1.3">
          <artifact name="hamcrest-core-1.3.jar">
             <pgp value="4DB1A49729B053CAF015CEE9A6ADFC93EF34893E"/>
+            <sha256 value="66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9" origin="Generated by Gradle"/>
             <sha512 value="e237ae735aac4fa5a7253ec693191f42ef7ddce384c11d29fbf605981c0be077d086757409acad53cb5b9e53d86a07cc428d459ff0f5b00d32a8cbbca390be49" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.hamcrest" name="hamcrest-core" version="2.2">
          <artifact name="hamcrest-core-2.2.jar">
+            <sha256 value="094f5d92b4b7d9c8a2bf53cc69d356243ae89c3499457bcb4b92f7ed3bf95879" origin="Generated by Gradle"/>
             <sha512 value="e6c3f02e25070177f8101f9ca265046f8c9569f82560051dbfb1e6a28c9937b1a7453f68e9a37bfce0eb69bacf45a743d16e78add931e98195d260b8a516557e" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.hsqldb" name="hsqldb" version="2.7.4">
          <artifact name="hsqldb-2.7.4.jar">
             <pgp value="D76260C72DF74E66268F7770AB049DF4AB24C1EF"/>
+            <sha256 value="5fab2bb4384ac06b762638c8fa2740c944b8d080e4796c0c6c2af8b90dd4e5ad" origin="Generated by Gradle"/>
             <sha512 value="d30681058778d0d89339781052c3da30cbb817a9f4f79a8ca3fbd2b4fb83f5b797c10415df66028fa2a16f267dd06a2330632ce9cd577e0cb959d8de815fe46e" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.javassist" name="javassist" version="3.28.0-GA">
          <artifact name="javassist-3.28.0-GA.jar">
+            <sha256 value="57d0a9e9286f82f4eaa851125186997f811befce0e2060ff0a15a77f5a9dd9a7" origin="Generated by Gradle"/>
             <sha512 value="49d3109104f01efda1ae8a6145fdb91d1b1331587e2981f6cc1a1b991c50af97e8febfea5d9d224a106cab877c1e4850d183eb3c7316b82e62e51b6ca3fc29e8" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.javassist" name="javassist" version="3.30.2-GA">
          <artifact name="javassist-3.30.2-GA.jar">
+            <sha256 value="eba37290994b5e4868f3af98ff113f6244a6b099385d9ad46881307d3cb01aaf" origin="Generated by Gradle"/>
             <sha512 value="046c5b87732ef28540c56f88891238e49ac15fcc23e1f13e0b12de816831ba3de54e68a727b6163877a7b19b13f1362c0e6affa2664af1fdac5748632ed7a09e" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -2461,32 +2859,38 @@
       </component>
       <component group="org.jboss.bridger" name="bridger" version="1.8">
          <artifact name="bridger-1.8.jar">
+            <sha256 value="58cc8f9a0e52078464bc1a2e1d013da6d023b815d799604690abbf10784959f6" origin="Generated by Gradle"/>
             <sha512 value="b4befcc3fb746fb6e4cbf8249578db198986d2c3b467631015ef3e2daf378e0ef2fc0a30073f7de126326895525d221762d85e5a5b6b5c6d7e05ed099fcc5aeb" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.jcommander" name="jcommander" version="1.83">
          <artifact name="jcommander-1.83.jar">
+            <sha256 value="e65f49c2119a1859b9076061e561fb5958a2fa6ffdb49f051ca8d59a0b3f87e4" origin="Generated by Gradle"/>
             <sha512 value="ff54e766491b5f6ff7b1ea7e23980a9dc45f81075c6729d9d9de22334309a4895ece7896304ae91641a627feadd8ccaa3c583f76a93442eba75ec66dbd6be5ff" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.jcrom" name="jcrom" version="2.2.0">
          <artifact name="jcrom-2.2.0.jar">
+            <sha256 value="2b1afe2b1f801adc5869cbd1692bec61a71e7c5877e61bf2c0b80fcbf14d5850" origin="Generated by Gradle"/>
             <sha512 value="86846d183689d3512815ed7a4244cda5298313b73b4653c18eb7b8fac9848746cd6b0f05a66ced87f03f55b2a63fbb7d0fbe658a51fd858f62906b6acb8b4012" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.jdom" name="jdom" version="1.1">
          <artifact name="jdom-1.1.jar">
+            <sha256 value="3c167654499436ee9c19674b519d04e7364085533f6facada1bf90b16ad34897" origin="Generated by Gradle"/>
             <sha512 value="99f12b9089c2a81d621a35457a0204c9dd4ea9988ca2736be6c5acd00cc6dc05865b9f643ab027132d58c22596f6cdd03a9977f723ccfd05134b6e02c6420ef7" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.jetbrains" name="annotations" version="13.0">
          <artifact name="annotations-13.0.jar">
             <pgp value="2E3A1AFFE42B5F53AF19F780BCF4173966770193"/>
+            <sha256 value="ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478" origin="Generated by Gradle"/>
             <sha512 value="5622d0ffe410e7272e2bb9fae1006caedeb86d0c62d2d9f3929a3b3cdcdef1963218fcf0cede82e95ef9f4da3ed4a173fa055ee6e4038886376181e0423e02ff" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.jetbrains.kotlin" name="kotlin-reflect" version="2.0.21">
          <artifact name="kotlin-reflect-2.0.21.jar">
+            <sha256 value="3ad2fcad0c09ddc0922debab4444d612144b7b465b75a8bb7587e20ddfafd799" origin="Generated by Gradle"/>
             <sha512 value="3b35fb5684bc7cad47a5c068b2671ae55cabe6ca16745277ac44ce0785b1384ad35444fbe10b68ca7c360ba9a86b0061a6101956b370e6c19bd8c85c9bc13dcd" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -2502,31 +2906,37 @@
       </component>
       <component group="org.jetbrains.kotlin" name="kotlin-stdlib" version="2.2.20">
          <artifact name="kotlin-stdlib-2.2.20.jar">
+            <sha256 value="8836ccffd3585fadda9901244b20d42901d2f3cd581058d8434e2ffabcf3a3e7" origin="Generated by Gradle"/>
             <sha512 value="22075ba5931e86fcf471249b88593f0651a356a71a2f3152e25effca9a7420a1562579877aca40c98f625bf5a35fa983393a939cb54bbb4c58de13676254d62d" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.jetbrains.kotlin" name="kotlin-stdlib-jdk7" version="2.0.21">
          <artifact name="kotlin-stdlib-jdk7-2.0.21.jar">
+            <sha256 value="712f480760edeee48a84369e6be89f6ab52375408bb2ca3be14ef663f72bee31" origin="Generated by Gradle"/>
             <sha512 value="6d79df42475c37e332c06da5ffa870589a04e676cd99c292500d10ebc4556d36659440157eb6d88dc813df12126826db7722fd3667f23463011dd284b89fe2d8" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.jetbrains.kotlin" name="kotlin-stdlib-jdk8" version="2.0.21">
          <artifact name="kotlin-stdlib-jdk8-2.0.21.jar">
+            <sha256 value="15c8c0acb311483c068d1697501965474b70dfd80ac79580eca3a03cf51e4a1d" origin="Generated by Gradle"/>
             <sha512 value="8ca85069e6f90da6fe2942e0162676c16c9b45cfa4da7a26b9811e4f1f89c7b859416dc8353c58819c6726ba463546ad7720a859a325a106f4bc606c57f67ee9" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.jfrog.buildinfo" name="build-info-api" version="2.41.22">
          <artifact name="build-info-api-2.41.22.jar">
+            <sha256 value="da10186c3ba43561092cbec66ce9aef81ff47de2d9d865918ff8e3cd2914c90a" origin="Generated by Gradle"/>
             <sha512 value="564c59c513e82ec053628b9deaa1a791a831eab248db98634a4d336cea2aefef4c12be4c896b6b298432f282c99d6740febded74ec3c4f7e9b9f4549a8eec32b" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.jfrog.buildinfo" name="build-info-client" version="2.41.22">
          <artifact name="build-info-client-2.41.22.jar">
+            <sha256 value="ce75866049e5a313908b9732394996c2596fa636cbb8dd4f4c5918102dc519b5" origin="Generated by Gradle"/>
             <sha512 value="edcba8ebf24505fefff08f1b455666e5c45458a4d6eb184632a3753d49521226cb24011b364b327feefd4da7a78532254147ccf710eb0ef67cff2d04a96b7ac1" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.jfrog.buildinfo" name="build-info-extractor" version="2.41.22">
          <artifact name="build-info-extractor-2.41.22.jar">
+            <sha256 value="5091430cb08b20c4e1792bb28bf1a37a3cdf588c39891fdba3aac5d1a3f4042b" origin="Generated by Gradle"/>
             <sha512 value="1e2bd3cba43850a7bbff1f0a19b7744418b0b7b5603931fad4c03b3872b22e27928a7d8d601bd8d8bf434f48bf4f6f39bc6276df174335cd2f002f8a3c34c55a" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -2535,11 +2945,13 @@
             <ignored-keys>
                <ignored-key id="49BC0306DEB0ECE16CDD09652EE4988C55528F25" reason="PGP verification failed"/>
             </ignored-keys>
+            <sha256 value="600c9fea2dfc79d6b7939cd3038d9dbaa7a408c7c5542d63be0f12c73527421c" origin="Generated by Gradle"/>
             <sha512 value="3e03bdcc0b2752ec7e323e4d077257705ce129ed8c2b0c4960d8a6da6e4552a13cd0bbc7bec8b83c127666a7a54b68f7d60f7d804558cb66a0634ba5388a4de9" origin="Generated by Gradle" reason="PGP signature verification failed!"/>
          </artifact>
       </component>
       <component group="org.jfrog.filespecs" name="file-specs-java" version="1.1.2">
          <artifact name="file-specs-java-1.1.2.jar">
+            <sha256 value="bb0dbc2c2b9fc993cfa86711398f4caf1480a9271c6d07a3a97c11b1a8e6141e" origin="Generated by Gradle"/>
             <sha512 value="6516f8fa86867c261d8c1f6ebc26b7d6c3d59f14f820c6054afbb886653530c613a134e484bb999a00f82ade9b22dcab304e4a3df1496971e788b15c5054ae2a" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -2558,6 +2970,12 @@
             <sha512 value="6ab69b497b7bbeff05841bd96dc78681eb4049f347ee51ecb5134a8d6d7fa691a7f13c2e611f70407333cdd576b6b99dbf7d4c1c73d63b613832020a2f372f66" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.jline" name="jansi" version="4.1.0">
+         <artifact name="jansi-4.1.0.jar">
+            <sha256 value="a2ebabfa05b4c293a334a5c68544ee273f232f1fabdf8710c920a53d14847392" origin="Generated by Gradle"/>
+            <sha512 value="5aa76eeda283405cc63879e2cd17e8ffaf1e299785153c0da29fb229e58202ae12eb4eefcb15ddb3cf2540b8fad0456983083bc2472cd60d9162aa690f7ad211" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.jline" name="jline-builtins" version="3.30.6">
          <artifact name="jline-builtins-3.30.6.jar">
             <sha512 value="1d38cd5a5f7bd781af2e39b7bc9f011bbad8d93670af9cec143f8d452acbfc7a333568dd1a086cae029831f3e8b0c82ae09a4428295c284c1710d35c99e40034" origin="Generated by Gradle"/>
@@ -2573,6 +2991,12 @@
             <sha512 value="90ed41499c13d0b97747422fc903cdb27df59e388224b86be80ba4962a5a50479a2455329a94ac0683c8929a8b4c6212a3f4aec36e9dd7fd66217f7b6aaba710" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.jline" name="jline-builtins" version="4.1.0">
+         <artifact name="jline-builtins-4.1.0.jar">
+            <sha256 value="07f23f3c31fce9c9cce02603454c0338c13617b8a967cd9effe0b68d15e93762" origin="Generated by Gradle"/>
+            <sha512 value="00b352847f942a8561daa5c0282a112261c0db858d87702afcb3a036b418ed51177a1aa2216d70205d1171d417bffdd6b24313d7f1e09d4d031a7a6ddf2d44d3" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.jline" name="jline-console" version="3.30.6">
          <artifact name="jline-console-3.30.6.jar">
             <sha512 value="b4ba02cd15f302d871fbe862f46a31325ab309ce0932849ed26e62967f94965b2ccc7fb6995cf79d3c408d2f54ec6243f5d3f3afd614b54f7244f1ccac5828e8" origin="Generated by Gradle"/>
@@ -2588,6 +3012,12 @@
             <sha512 value="51c90fc75bdb15425f1d67f1c2d01b8c107f114a896aa51653eee7c0bbb5c2c485fac26352dab61d4f68dc86b9c6cffadace8fb4b0a42d139f7b172db429c858" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.jline" name="jline-console" version="4.1.0">
+         <artifact name="jline-console-4.1.0.jar">
+            <sha256 value="b4407c7597fb7ead67557234fee3ec78bab890c2e49faddf3fb7e039a980ca26" origin="Generated by Gradle"/>
+            <sha512 value="33c7c2b9c1abe61c0958ff463eb0779880d0c18f1a626a0d97fe00e0de7cf318ac76accab6e9f54e692e4bfaefbc00fbfb3f081a8ae970b552794f2d21b63eb6" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.jline" name="jline-console-ui" version="4.0.12">
          <artifact name="jline-console-ui-4.0.12.jar">
             <sha512 value="8b4092382708ce4c20090fc7a7f8598c18af46326d792a542e2a020473bee280c5ab9786ab9e7675e3890ca3f79039a777b4aebc31099ce62aa234d34990682d" origin="Generated by Gradle"/>
@@ -2598,6 +3028,12 @@
             <sha512 value="b4501654c4eae7f9f30d533e93ea2e24649edef74d42fe24b281deeb32e2d741cd8a5e9b75cbe319c8ea8c077830944f0bf7aabc8fc7bef5bae614998176bd88" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.jline" name="jline-console-ui" version="4.1.0">
+         <artifact name="jline-console-ui-4.1.0.jar">
+            <sha256 value="25bb21b7c16d663b05401718310a79444b3e69bf7ae37883293ff1faf6f7c3eb" origin="Generated by Gradle"/>
+            <sha512 value="1daf7c3e2e9344aaf0cbfc6ac0596b778a121fb3a60835ec9c9d9b4afdf6876c3b75257032daa6fcd82f4aeb04eb65043fe5719b2543a7888ba352baf10db658" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.jline" name="jline-native" version="3.30.6">
          <artifact name="jline-native-3.30.6.jar">
             <sha512 value="5ce5df52acd8f1d4aa4e3d4b1ac5c1b4f4f227b1cfe51f9f9d39aed868b56af2d256cba684023c92ae6051ada14f3bcc821372c29ac88a8a8181552e4f7929f4" origin="Generated by Gradle"/>
@@ -2613,6 +3049,12 @@
             <sha512 value="e8c4590f0f157daed8413bcf85feddbed4232a2a3182f6c8b6618ea2bc7edcdbeb3d84b9ee13b3e3af3a13e5b0a66d6955e7438d9a32992f04eb696248f3bccb" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.jline" name="jline-native" version="4.1.0">
+         <artifact name="jline-native-4.1.0.jar">
+            <sha256 value="687ff9401365144790650a71ebcb42f088d1ca3c7fb26f9d0312838785e61f19" origin="Generated by Gradle"/>
+            <sha512 value="b79aaafdc6184d82d7a1beb15c0acc307c5c8f1395838573199ad0cb90d8ad56b509d547ebbbec8b0752290b86d88b357537f8a046b58032c2455477bba7b2f9" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.jline" name="jline-reader" version="3.30.6">
          <artifact name="jline-reader-3.30.6.jar">
             <sha512 value="f4247cffbf088739bd93d4d709eb3c1baa8e7f8eabb45a63cbb040be4199eeda75829a99cf1daf59f7b87040e446087e38f2379cdd1b14798b24491866a62ae5" origin="Generated by Gradle"/>
@@ -2628,6 +3070,12 @@
             <sha512 value="72e10370e44a1f901e3546f6007653177dcae45609fb7e178c3fa003fb6d4bb955519e53636b58bf30a8ade76f3359fc2a64ba74788eb7fce3dd438938612246" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.jline" name="jline-reader" version="4.1.0">
+         <artifact name="jline-reader-4.1.0.jar">
+            <sha256 value="1e9fbfbbe3379618d4f4aa57786658d72eb18ffaeed58a4d19e272b92f650ade" origin="Generated by Gradle"/>
+            <sha512 value="4c462b30007e610a57a52fffa4557a9f58a9e62c2f82fa2bfd8ae15366fe8549018152efc48d032c43f568998aa36602f318eb52d5f76039dd65ffcde82255c4" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.jline" name="jline-shell" version="4.0.12">
          <artifact name="jline-shell-4.0.12.jar">
             <sha512 value="0d3d38f782e8b27b807b3256370de512e170950b4d280d65c5a079cf9c79ebfc3e97668691d244867baf3526189b228a7db4c5d3ffcfab1f28ed800cabd12328" origin="Generated by Gradle"/>
@@ -2638,6 +3086,12 @@
             <sha512 value="df457ff47d7694957115e51dffaba996cfaf27e21eac96890d04528b0457318bc43656252911c179ffe6a3338dc82e4616afe7cddf333118cf5521a0d88cb699" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.jline" name="jline-shell" version="4.1.0">
+         <artifact name="jline-shell-4.1.0.jar">
+            <sha256 value="6c5620b535f3a15c0e9c4bdcf89419e803dd0af92868350aa9579d79866b3e1f" origin="Generated by Gradle"/>
+            <sha512 value="f8ad354092aa00a2f0d269d64faad86d09afecaf5a834080fdc9cb059182564c44caed1ac8a17e7a41fa3f15df365d282502c01f293bf1cca2e91b6d09c036cf" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.jline" name="jline-style" version="3.30.6">
          <artifact name="jline-style-3.30.6.jar">
             <sha512 value="e9a1e6b678081a9e570876c7aca34f716ee7551cd69a9203d13c278f6fe00bed041f2d147a38eea3db1f4fa19146d82635b0e29fb339b005e3f9f30df3522e0f" origin="Generated by Gradle"/>
@@ -2653,6 +3107,12 @@
             <sha512 value="ea4440dc9936964cf05c41d9b54a89fb6342575de996f6ced50ec6ec0ddc75212289009ce10c9f45fe30811aaf31630cc3be127c7582fc0d5f5dbcdb448aa318" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.jline" name="jline-style" version="4.1.0">
+         <artifact name="jline-style-4.1.0.jar">
+            <sha256 value="a1f4c691d344a5fab60ddd143a711fe3805d2619b1605a431c67a505766bb42d" origin="Generated by Gradle"/>
+            <sha512 value="ff159434ddf56937aab7fd4015d251c68ad27e7c420d1619c8da463eaee08f7a8862e763d81c4821882e3c4ff5603498807f47c891bb9c6bbbf17e1c5b74f5bd" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.jline" name="jline-terminal" version="3.30.6">
          <artifact name="jline-terminal-3.30.6.jar">
             <sha512 value="127b97c30a9fda9b880053c1c312c120f93666ce8ffc89a5d2f29e7c7904faf79dd6e423ad93276140202cc7c8aa39451855faad523b7b6fb198b467e7c10688" origin="Generated by Gradle"/>
@@ -2668,6 +3128,12 @@
             <sha512 value="4eefa773747f05d56a18d4c20f373f59b048a7ec30a1e11d6c6e8c6ae2d660003b4d62227c6dabad19d6ebea915f22c0d5e1de278be186ec461e5602407ca864" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.jline" name="jline-terminal" version="4.1.0">
+         <artifact name="jline-terminal-4.1.0.jar">
+            <sha256 value="38796adb7c51a4ab64839fbce5225a3515ed51b867cca940c0ecc8718d1bcbeb" origin="Generated by Gradle"/>
+            <sha512 value="e82ef8667d3d8b2acf5a2b6b1cea433aca0d0cd9a519037462df79ab4ca2423ffbb6e46c447fc402be2f6fafe921f5988899567ab5c6644ad612b8834ca51455" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.jline" name="jline-terminal-jansi" version="3.30.6">
          <artifact name="jline-terminal-jansi-3.30.6.jar">
             <sha512 value="e162b1dcc6dcb3f9b4bba6a99d13d50db2bfa55d383cf72aec156bb41532950ad5f6d9460efbf4785afdc98e4b8287fb96d29823510e494cd6246a8a18a571da" origin="Generated by Gradle"/>
@@ -2693,8 +3159,15 @@
             <sha512 value="ac2ced8c9308a6f1606dbd4e15dce428d0fecef9bbd16d3a350368067af7a4aab3773242f46a7d89b9f7422942ba4fc10582232977a3d47240686f8c1a5e66f6" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.jline" name="jline-terminal-jni" version="4.1.0">
+         <artifact name="jline-terminal-jni-4.1.0.jar">
+            <sha256 value="fce7ffc8f3e857e6c4ab8621bb434b05e5615ef7621b688200e5fab0ec440352" origin="Generated by Gradle"/>
+            <sha512 value="d93da9df46e91f9853969e6d40632549f10244c7475bb53e825053f7260086d3da624ed11d7ba0d7cd7b7fa67f431c58b0f171a066e37c1de814cf13c6741a1e" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.jparsec" name="jparsec" version="3.1">
          <artifact name="jparsec-3.1.jar">
+            <sha256 value="8c0dbeb70b57cea4da22df5e7f08c04e3004a7615391a03f01b38f7311719152" origin="Generated by Gradle"/>
             <sha512 value="0b5b15349b63d7fe1cb6880e8abc9bed54750f1207d978f85cd8475890c0a40d011917e586047b75620f5df42ed41f0e524d9446a266c1e8b80201907094c17a" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -2757,6 +3230,7 @@
       </component>
       <component group="org.jruby.jcodings" name="jcodings" version="1.0.63">
          <artifact name="jcodings-1.0.63.jar">
+            <sha256 value="ef11e1741a65160c5619cd2c3c79c40ee0affda847062f012616034b9d10e719" origin="Generated by Gradle"/>
             <sha512 value="280e989a1af7679da82bb9adb27a8c4e08c8da09f0bb93c380a36bfe7071c62bc9e7248b634d9e04f3ab275ec0672a44f8ab41dca8c10128c4351b6302275e84" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -2767,6 +3241,7 @@
       </component>
       <component group="org.jruby.joni" name="joni" version="2.2.5">
          <artifact name="joni-2.2.5.jar">
+            <sha256 value="c2cdc754e9fb428c96e510cf55c0cc2a80c0574596de3423dcd33133fb0cca1b" origin="Generated by Gradle"/>
             <sha512 value="8723a3d245c39d289c409b4be7b8ab6071c1aa459b9b73562b316b829096335bea51df98df15d9bcabc9eb5bc0437f90ecfa269089faf34ca81daf81659f254d" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -2777,12 +3252,14 @@
       </component>
       <component group="org.jsoup" name="jsoup" version="1.22.2">
          <artifact name="jsoup-1.22.2.jar">
+            <sha256 value="596785996d3c6df16f544c232d10a9a1d88783b2a4740cf5251cb616f2be704d" origin="Generated by Gradle"/>
             <sha512 value="7e7bf4ced4eb26eaa7810bdc001b8171336f3b2f395f8659aef06cb207520f199cf61a67e6f77e9a2ce1c3e78f64f6ee56b3c2af58da9af42cb7f08925263ff8" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.jspecify" name="jspecify" version="1.0.0">
          <artifact name="jspecify-1.0.0.jar">
             <pgp value="41CD49B4EF5876F9E9F691DABAC30622339994C4"/>
+            <sha256 value="1fad6e6be7557781e4d33729d49ae1cdc8fdda6fe477bb0cc68ce351eafdfbab" origin="Generated by Gradle"/>
             <sha512 value="efded31ef5b342f09422935076e599789076431e93a746685c0607e7de5592719ba6aacde0be670b3f064d1e85630d58d5bce6b34aed2a288fdb34f745efb7bc" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -2798,11 +3275,13 @@
       </component>
       <component group="org.junit.jupiter" name="junit-jupiter" version="5.14.4">
          <artifact name="junit-jupiter-5.14.4.jar">
+            <sha256 value="a573c9a99af73e1889d1d3ed7e12067c85cff6a821b96a1916e5ccccc375ae58" origin="Generated by Gradle"/>
             <sha512 value="1132de399f97b844654001c1b28fcc56e39dc597c38f45990695651be68485a050e344ca6304fbb72fca82c84e83eda3a587d74c52e469dbbc51cc39207f6a7f" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.junit.jupiter" name="junit-jupiter" version="6.0.3">
          <artifact name="junit-jupiter-6.0.3.jar">
+            <sha256 value="784b65815f479a0c99a9d3a573b142e2a525efb6025d97f751b19e72f90aeda3" origin="Generated by Gradle"/>
             <sha512 value="a7e4e6ac16bb0efec4fe36941e61835c8e28c2de535bba6f1e69b84781eb3186fa7cb9b63ee4499f9dc42d332c271d50c8c27e9b1db77aca43ad00f2de4a5dc1" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -2813,11 +3292,13 @@
       </component>
       <component group="org.junit.jupiter" name="junit-jupiter-api" version="5.14.4">
          <artifact name="junit-jupiter-api-5.14.4.jar">
+            <sha256 value="aa1ae085fd92dfdbf85d867e60e59adc599bac183b46fc7e0698198bf426ad3f" origin="Generated by Gradle"/>
             <sha512 value="3b1c118b3dc1dd86a0cb1a4987d3b80ff81bec3c0edffad9d395143bc9ed551080a6cf658c77b5070733bcd49cd91b92390c085a8aefcbf8d3522ae5ffa185b9" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.junit.jupiter" name="junit-jupiter-api" version="6.0.3">
          <artifact name="junit-jupiter-api-6.0.3.jar">
+            <sha256 value="d655d7e6f0c7ae07f10a2f3bbaaebb6d30e9b26204a068ad9e9b3950aa28792c" origin="Generated by Gradle"/>
             <sha512 value="145605177009d17d0d5698f7d827db805b5ea53fc54e67058cb1d8fdd79123a85da6f5e1a28fd8105d08175b74c5dd3a99928aa207ab00d734a1febfc70db1fb" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -2828,11 +3309,13 @@
       </component>
       <component group="org.junit.jupiter" name="junit-jupiter-engine" version="5.14.4">
          <artifact name="junit-jupiter-engine-5.14.4.jar">
+            <sha256 value="e1e35cf651ae1635638d431ea4412d5c65938be54150444f07ba659586042b11" origin="Generated by Gradle"/>
             <sha512 value="d9e568ee378517762f61deda9a3368f337b7e0644024358220dc746a29005d7797a19743d2d625e9b239b86d9a43977b98b0cbcf2b22ab38f348a1984e07cff0" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.junit.jupiter" name="junit-jupiter-engine" version="6.0.3">
          <artifact name="junit-jupiter-engine-6.0.3.jar">
+            <sha256 value="1e2fab61ad27ea08fc7c70dd9677cf8c6d1ae5434d42dcfdd633b12c7e7c04d0" origin="Generated by Gradle"/>
             <sha512 value="8d9b04a779d23c1fe76daf446de804dccca785d5f5f55df5d3b3aa373694a2c210e142b0e27d0ae56de28316bfd6c8cd4ac6bb93094b3cf959a867c4e333d226" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -2843,11 +3326,13 @@
       </component>
       <component group="org.junit.jupiter" name="junit-jupiter-params" version="5.14.4">
          <artifact name="junit-jupiter-params-5.14.4.jar">
+            <sha256 value="28f2a8dab5b9d259b18fa6b0ba5a6f302cbc70dd875f42032ea9e3afea09a870" origin="Generated by Gradle"/>
             <sha512 value="4e77131400b642aa166d3966c7176a7ae0679924db6d026352264e685388824266c6b046c8cd5425856531056633371223d97f739cb479dae442e757a4f0ae0f" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.junit.jupiter" name="junit-jupiter-params" version="6.0.3">
          <artifact name="junit-jupiter-params-6.0.3.jar">
+            <sha256 value="cf2947e2302b9f8c8a059259a277881c1cadae8fbc2514c16a925cfeb7beb2e5" origin="Generated by Gradle"/>
             <sha512 value="bd1215b879f8cb63162c9a219550acf3bbaa143a8161b276812f124af784112a2fd94b6bae983beafd0de7f6d0c36f223727bb41b7d6d87947500b750fffdede" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -2858,11 +3343,13 @@
       </component>
       <component group="org.junit.platform" name="junit-platform-commons" version="1.14.4">
          <artifact name="junit-platform-commons-1.14.4.jar">
+            <sha256 value="55c8a0c069ac1bc4e1f8bbb26b5eae95cbd10e4ff1b23248441ab61a607381e1" origin="Generated by Gradle"/>
             <sha512 value="2cd0aad67137deecdbeddb2ca48ad4f26be29392f52cdf9c685c04a90ea438859769838e3767e9887916dcf90c50e3c30a4006dd7941b269e3fc856136155e54" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.junit.platform" name="junit-platform-commons" version="6.0.3">
          <artifact name="junit-platform-commons-6.0.3.jar">
+            <sha256 value="39f262d09c3d52719fe0b77f080e90a3695e285d779a41b232e17963ae5da200" origin="Generated by Gradle"/>
             <sha512 value="a22154edbf3c277421dc87e924f5cbe7e2807df43a7b14911303d9f578b4cbe1f3dd5123aff2b94cecd5def3a5141710d6c127f58a03f6ace30be5bd3171fd6e" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -2873,11 +3360,13 @@
       </component>
       <component group="org.junit.platform" name="junit-platform-engine" version="1.14.4">
          <artifact name="junit-platform-engine-1.14.4.jar">
+            <sha256 value="3c7f3f84a6747aef0db6bd5fdd2a6c8fe37132e653c939bd67387377af66d91c" origin="Generated by Gradle"/>
             <sha512 value="1650979450a23cd780f3e6b3d2378011b32d35079612ad22cc0a20753aada0ab20fc554a06e59fbd6d15ebe9ab030d86855dd42175ee1cf8f5bb0b26a14418e5" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.junit.platform" name="junit-platform-engine" version="6.0.3">
          <artifact name="junit-platform-engine-6.0.3.jar">
+            <sha256 value="491e9e4f745f161b8a8e4186a1a7c6a450ea12c70930c9aedae427215301d947" origin="Generated by Gradle"/>
             <sha512 value="0235da442ee6e189a87f06415c97fdbae1146f5a18ba2e0e9fc57a86916fe4ca1ccf883bb8b96730a524179217de88638cdf87ce7c8ba284cd0fe6f79d93f7aa" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -2888,11 +3377,13 @@
       </component>
       <component group="org.junit.platform" name="junit-platform-launcher" version="1.14.4">
          <artifact name="junit-platform-launcher-1.14.4.jar">
+            <sha256 value="768d62f1b2a523713b702db53609c230af62bbd645fc2c07a7d794df4da32228" origin="Generated by Gradle"/>
             <sha512 value="47a5f4edec773a3161ef463b5b307b4da5c71f39c4e80b7e92d398512e1c5152c957fb8f1c7cd858f7e394e624465eca937b3c0796948fd46a2efee4369a2a9d" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.junit.platform" name="junit-platform-launcher" version="6.0.3">
          <artifact name="junit-platform-launcher-6.0.3.jar">
+            <sha256 value="315608372e4dc44bca0ccb3ae8a07ecc206b3367033fa05748a03ccd563f1301" origin="Generated by Gradle"/>
             <sha512 value="f368b25eb2394328994fe587e8dc295e9e677c55c8d7b559d5798a262e22bbe963cdfffdc0879b54acc2ae500a78e17a7b80e0638d5d411a8b6c84fb11fbe4e3" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -2920,23 +3411,27 @@
       <component group="org.junit.vintage" name="junit-vintage-engine" version="6.0.3">
          <artifact name="junit-vintage-engine-6.0.3.jar">
             <pgp value="FF6E2C001948C5F2F38B0CC385911F425EC61B51"/>
+            <sha256 value="e0935f0b44296e73fe487dede48a0e7cfa7c3cdd066f8345f89a61ed51b58132" origin="Generated by Gradle"/>
             <sha512 value="7b0b92cf0a2bfacfd63417288b5dd115b7ddb2f6c128deb7d5045021e86ca0ce89267b56b70048acd0f600d1137350c485f35981cf57ac991755ee66019f4441" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.jvnet.staxex" name="stax-ex" version="1.8.1">
          <artifact name="stax-ex-1.8.1.jar">
             <pgp value="04543577D6A9CC626239C50C7ECBD740FF06AEB5"/>
+            <sha256 value="20522549056e9e50aa35ef0b445a2e47a53d06be0b0a9467d704e2483ffb049a" origin="Generated by Gradle"/>
             <sha512 value="d060ea5dcc81508a1078bd0ed947553a5652a5a78da76cd00dc2e384dca014166dfe92777fceb7d7868699894d7e40ecef99fac7771372025bfd7f1fa3e2fe32" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.jyaml" name="jyaml" version="1.3">
          <artifact name="jyaml-1.3.jar">
+            <sha256 value="4705c8b14837fb27247cfa027382cc36e2235194bc19860a19109a374df23df5" origin="Generated by Gradle"/>
             <sha512 value="2ba6501ad98dfd88bc76d6b5bdf312f0d2f5c1e13f40f341b99064a86f4cd85134b75286df1297e3b76cd08947c52dcb6827993d62d18d7d915061561021a52a" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.mnode.mstor" name="mstor" version="1.0.3">
          <artifact name="mstor-1.0.3.jar">
             <pgp value="D71534DDED75B2DA189E14DF385EF0846E5CF3F3"/>
+            <sha256 value="0251d8bbc355691c512c3bc49c42dac3deaff7104743f73d4bf4de3ef3feb737" origin="Generated by Gradle"/>
             <sha512 value="a81f6023bc9e40d3adbc271b3f661d0b4ea5f839b780f0247bb3ef932f5fe2bc50071d17cc4e546b4039c1f4f674240536353db8458abd7bf366b2404213bd9f" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -2955,91 +3450,109 @@
       </component>
       <component group="org.nosphere.apache" name="creadur-rat-gradle" version="0.8.1">
          <artifact name="creadur-rat-gradle-0.8.1.jar">
+            <sha256 value="c1a58cbbe3d0a5e207cd90e79a9e22c9eb01d9e77f7313f4f5aa7d9e478a0550" origin="Generated by Gradle"/>
             <sha512 value="397c3257c5448c26304b312212f6da1649ad15e52ce0419c5ba647f8a68864707a0c8071fa9860c28aa9d626d66c8faf2d5f576e693f9d01b0f71eeeb84b57fb" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.openjdk.jmh" name="jmh-core" version="1.37">
          <artifact name="jmh-core-1.37.jar">
+            <sha256 value="dc0eaf2bbf0036a70b60798c785d6e03a9daf06b68b8edb0f1ba9eb3421baeb3" origin="Generated by Gradle"/>
             <sha512 value="8e434cc89f7c8a3035e172675d9f914415039ad8dc403a9f4a306efbe3249c20da0343aa51ebf9e3b9f8ba6746e8544ac561fbcd62f29dbb163b7f10c96c1f34" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.openjdk.jmh" name="jmh-generator-asm" version="1.37">
          <artifact name="jmh-generator-asm-1.37.jar">
+            <sha256 value="de29bacc5c3a413215800f57de9017fdda1b3cb6e5359ea0c84ebe13c9610222" origin="Generated by Gradle"/>
             <sha512 value="22f775a344b1c1266c6cecd515f637a3b3211d1f3ca2b3a0de0d35be02ce888b148316a6bfc7043c9ca8a7113f73d84aee19ca80df7fcc336e0351c09d2d131e" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.openjdk.jmh" name="jmh-generator-bytecode" version="1.37">
          <artifact name="jmh-generator-bytecode-1.37.jar">
+            <sha256 value="619b3d15a5e8bfc4ec49d3b7a64dbed053a0ca8625820a49a4f869d1b8c71d09" origin="Generated by Gradle"/>
             <sha512 value="a29cc6fd63b2b59d65cdd9a5e9511496fb545c2f707db3c4d0c9fbb62486eb3dc1613edac603dccd83e0e1f8812d7ff1ca7defe7ef6892df0fe7d8f4af93fd30" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.openjdk.jmh" name="jmh-generator-reflection" version="1.37">
          <artifact name="jmh-generator-reflection-1.37.jar">
+            <sha256 value="a0421dbbe5e77690df2dfdef98618b62852d816bbb814c5cbd0b4d464bff32b0" origin="Generated by Gradle"/>
             <sha512 value="ce944a9abe765d72392f037af784c31006f6475aab773e067f8fae5075eeece4367323ae4b48dfd43cd7c3c0bf43fcba7ef3123625c1a91cd9e7674104f2589f" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.opentest4j" name="opentest4j" version="1.3.0">
          <artifact name="opentest4j-1.3.0.jar">
+            <sha256 value="48e2df636cab6563ced64dcdff8abb2355627cb236ef0bf37598682ddf742f1b" origin="Generated by Gradle"/>
             <sha512 value="78fc698a7871bb50305e3657893c10500595f043348d875f57bc39ca4a6a51eda3967b7c8c8a7ec3e8f85f2171bca4aa98823e912e416e87e81c6ba5b70a37c3" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.osgi" name="org.osgi.annotation.bundle" version="2.0.0">
          <artifact name="org.osgi.annotation.bundle-2.0.0.jar">
+            <sha256 value="b9c9546ec5be3ebc2e85ba4919150ad76d64594805282fc895133a47d264a7ae" origin="Generated by Gradle"/>
             <sha512 value="f16b8983240ba3c08d6bc78e2eae92e89eb528f32a705961d90b463def0a5ed1ba08cc3d0be38b5dcfb946c6f759df772e122fb769e58e8c20aa79a489a1fd21" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.osgi" name="org.osgi.annotation.versioning" version="1.1.2">
          <artifact name="org.osgi.annotation.versioning-1.1.2.jar">
+            <sha256 value="f51f235e80df8ffbc30ef1b557b6ea38a696632d675404ec117e952978b8b863" origin="Generated by Gradle"/>
             <sha512 value="a4c612bec624a168f25f0923d51925bbc914686673eeebd5b2442998b876f05855e2b0a6e6e9aca4a6533ed3156b0d24f94c3e508ee9778e1b2e469be318afa3" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.osgi" name="org.osgi.dto" version="1.0.0">
          <artifact name="org.osgi.dto-1.0.0.jar">
+            <sha256 value="cb75f3c7e48e5a31a31df22e26873346f5bf659e2dcab2369e031e4850d2ff43" origin="Generated by Gradle"/>
             <sha512 value="6c2e82be9a502b05817ce276a807ec0f72e4847ad1712b9c36afd2bac6989e88873c271ae87fd2d867f56016686b9e3b1a6b39c5e5bed76d6e52fb8e2569b615" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.osgi" name="org.osgi.framework" version="1.8.0">
          <artifact name="org.osgi.framework-1.8.0.jar">
+            <sha256 value="ec194b7871af27681716ff05259319a5c3c9b9727e8000e9e832499b93484b4e" origin="Generated by Gradle"/>
             <sha512 value="9be46a4a81698ac5641809f6b7061453f0960a585fb69a47331029362f605fa50edb51ceb22ae4c5ea2d3617fc1919e3d86a86acde435f73dc73f00e84f444aa" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.osgi" name="org.osgi.resource" version="1.0.0">
          <artifact name="org.osgi.resource-1.0.0.jar">
+            <sha256 value="81fc50f1f1d38a4af28e131907d4afe213249aab05060484edca0e60c4af9b4a" origin="Generated by Gradle"/>
             <sha512 value="4e798790856f83f50832db80bfab64dfceeff1c509d7dde43e74a9f9192ea7a7d5ea77b9b1e81291fa6ba3dcef5ab8fa791ca8093a72a08d7ca6f6499e13e506" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.osgi" name="org.osgi.service.log" version="1.3.0">
          <artifact name="org.osgi.service.log-1.3.0.jar">
+            <sha256 value="ff6710c4856d32684cf3ebdc45248f41036ff734f2b03bbc08c4609a61fecfa0" origin="Generated by Gradle"/>
             <sha512 value="fc6a0c6db6157866ee122741d2b52f55cfa827046d389e39c65d51a14a6846be7d0c8b549edae2f4ef902229f81d06eef1db2a9c850ef7539820ee3022cdec8a" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.osgi" name="org.osgi.service.repository" version="1.1.0">
          <artifact name="org.osgi.service.repository-1.1.0.jar">
+            <sha256 value="c5553e95b459529192433486d4c4cc22ff45a2eae4968484f9f717319264a532" origin="Generated by Gradle"/>
             <sha512 value="79e2beb14b0fcb28109a4095d1be685cf5bd375136a685c19175ed64faf885ca4768c28b484b57baed929e2b3cc52ec2731678b73f4586f8642d771c7d4988c6" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.osgi" name="org.osgi.service.serviceloader" version="1.0.0">
          <artifact name="org.osgi.service.serviceloader-1.0.0.jar">
+            <sha256 value="8f876ce2a9aa4e95b1f1952950255103e2487425050a654f3285447ba601c154" origin="Generated by Gradle"/>
             <sha512 value="a7def4cb7a8ed992645faa80a780e0b30bd39c1587b5bcb65fe170d10842d0d880c2849edd50c64807fe0e4b9cc0051337d1b161d0d390465d9e63a762861c49" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.osgi" name="org.osgi.util.function" version="1.2.0">
          <artifact name="org.osgi.util.function-1.2.0.jar">
+            <sha256 value="208819c7c71690c15a6bb8b187474e7f9d0147946b680182a62b9f222ae014ec" origin="Generated by Gradle"/>
             <sha512 value="3b60eeca88cfcb5b48bcae38c2e9c387648f014932b175c1343ad975ecac0bc0afe0aa7bcfffc1b520faccb36c75bd85b2f8cbac136b22e15460388becfa870e" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.osgi" name="org.osgi.util.promise" version="1.2.0">
          <artifact name="org.osgi.util.promise-1.2.0.jar">
+            <sha256 value="fef86e64f584d012a16a0306160764f6179663b90988a226c4641b920f3a4b36" origin="Generated by Gradle"/>
             <sha512 value="64923f94550c80058f4d9a6dfa35d4be68897d0ff42e390f36e2f0d6880e35e578628198087968ffd70abc7e0e332e166708efdffa0a975dd67f91ba021e57a2" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.osgi" name="org.osgi.util.tracker" version="1.5.4">
          <artifact name="org.osgi.util.tracker-1.5.4.jar">
+            <sha256 value="7d78c2cc9bcb6421c24f17aa097866ce8d9115c219a4f8d6cc753bc4dfb97efa" origin="Generated by Gradle"/>
             <sha512 value="eb8f66efc53d63c876f1ab6d67c91a286a3d1b346d043ee7ef5ba376c86c71bf412f7c82f855e78054761a1844b83116c50e775cfe18a11e10e812adbe4f45ce" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.osgi" name="osgi.annotation" version="8.0.1">
          <artifact name="osgi.annotation-8.0.1.jar">
+            <sha256 value="a0e8a4c362bd3600812f37b0ea45fba966c7bc049d01fed56a09ecc74082759e" origin="Generated by Gradle"/>
             <sha512 value="9e0dc035fd381d2f4b5c783227acd88656c7f4c8faaaa0e51178b3cd7b051871e0d7a6db906e32149d027df8dd738b27eaf80b74775dc5f6470e030c08a6b47b" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -3050,16 +3563,25 @@
       </component>
       <component group="org.ow2.asm" name="asm" version="7.1">
          <artifact name="asm-7.1.jar">
+            <sha256 value="4ab2fa2b6d2cc9ccb1eaa05ea329c407b47b13ed2915f62f8c4b8cc96258d4de" origin="Generated by Gradle"/>
             <sha512 value="7eba7097109389f48fa9142bf22d225f5d3104d68013d3b8e0a6d4054a8cd0ef64614372bdcb38987d68adb6d33a3804e98ddf112ba84dbb09d448ce702dacc4" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.ow2.asm" name="asm" version="9.0">
          <artifact name="asm-9.0.jar">
+            <sha256 value="0df97574914aee92fd349d0cb4e00f3345d45b2c239e0bb50f0a90ead47888e0" origin="Generated by Gradle"/>
             <sha512 value="135f0be16323936ef10a291df4e5d13ab8e488f41cc2835e9ccdddb3f6b65e948ef3b79eb12636c97815380455a32ece7fa9dd094f04b192a3e8752bbcb83463" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.ow2.asm" name="asm" version="9.10">
+         <artifact name="asm-9.10.jar">
+            <sha256 value="34f38c5d5e8bcb32cbd2d11e44bc12725be1ccdb87c3c96000af57fd81df6e64" origin="Generated by Gradle"/>
+            <sha512 value="e479d613cbd72b66b8a02472fb207e5c7f97addf53283f1e9e7e64cb60505be34a5c5a1f38a31970a6369ef92cc4a7bff6118d89fe836ff88eed160ef71d25ad" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.ow2.asm" name="asm" version="9.7.1">
          <artifact name="asm-9.7.1.jar">
+            <sha256 value="8cadd43ac5eb6d09de05faecca38b917a040bb9139c7edeb4cc81c740b713281" origin="Generated by Gradle"/>
             <sha512 value="4767b01603dad5c79cc1e2b5f3722f72b1059d928f184f446ba11badeb1b381b3a3a9a801cc43d25d396df950b09d19597c73173c411b1da890de808b94f1f50" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
@@ -3070,14 +3592,22 @@
       </component>
       <component group="org.ow2.asm" name="asm" version="9.9">
          <artifact name="asm-9.9.jar">
+            <sha256 value="03d99a74ad1ee5c71334ef67437f4ef4fe3488caa7c96d8645abc73c8e2017d4" origin="Generated by Gradle"/>
             <sha512 value="197a4fb3ecb34d05ac555c6a510e69affcb1e476f24c5e935ad513ecdabf74b45aa1b0e0b25dbe91224fc6db7959b2677ea5876ee49e7487265e2a29c560c21c" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.ow2.asm" name="asm" version="9.9.1">
          <artifact name="asm-9.9.1.jar">
+            <sha256 value="6f3828a215c920059a5efa2fb55c233d6c54ec5cadca99ce1b1bdd10077c7ddd" origin="Generated by Gradle"/>
             <sha512 value="bb43eaca8777c7b2b4bce9fc19f9be5742a736a23415e271643c3e14d3d82f565f6de0e29ebac570ce66b3921ece1ebd4de06abeb633ae28c17891de56973807" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.ow2.asm" name="asm-analysis" version="9.10">
+         <artifact name="asm-analysis-9.10.jar">
+            <sha256 value="9a69627e0a244fea382c89c6c7e0ea09c0301666724ef2b4eb8a99e8e1850a62" origin="Generated by Gradle"/>
+            <sha512 value="460bdaaa0c3ca4ea870b509dcf24ab5ebc491a057661d2ab224dca45e1bae6dddb5447c903ad78960aeb11089d336baa900926450f0f6e47a3faf8c5eb4a4615" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.ow2.asm" name="asm-analysis" version="9.2">
          <artifact name="asm-analysis-9.2.jar">
             <sha512 value="6f40139d81934ee67af8f9d35ebe1415ad8641a3c667dbf38af8d8b17160198b1eb7edf11add986afaa495352966866c64928cbba23273ab83d4f2c5a93d5130" origin="Generated by Gradle"/>
@@ -3085,6 +3615,7 @@
       </component>
       <component group="org.ow2.asm" name="asm-analysis" version="9.7.1">
          <artifact name="asm-analysis-9.7.1.jar">
+            <sha256 value="85b29371884ba31bb76edf22323c2c24e172c3267a67152eba3d1ccc2e041ef2" origin="Generated by Gradle"/>
             <sha512 value="a8bd265c81d9bb4371cafd3f5d18f96ad79aec65031457d518c54599144d199d9feddf13b8dc822b2598b8b504a88edbd81d1f2c52991a70a6b343d8f5bb6fe5" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
@@ -3095,6 +3626,7 @@
       </component>
       <component group="org.ow2.asm" name="asm-analysis" version="9.9">
          <artifact name="asm-analysis-9.9.jar">
+            <sha256 value="6a15d28e8bd29ba4fd5bca4baf9b50e8fba2d7b51fbf78cfa0c875a7214c678b" origin="Generated by Gradle"/>
             <sha512 value="293fdf9ffd6858559d9bf4a2b68dfcfc58cb581d27e0fbcd2c2d0c540520498e9d587094534dd58d782ff5051b90f160971cfc388ea132e06eafa089bcc0bed7" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -3103,6 +3635,12 @@
             <sha512 value="f860f19969391398a80dc75417912e3d04978d38048b654ffef048ba801976fbd97480ec9d49a7f3cec0c2a80e2257c4a660804b2dd6fb79a02ca934e5d66036" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.ow2.asm" name="asm-commons" version="9.10">
+         <artifact name="asm-commons-9.10.jar">
+            <sha256 value="4282689aaa9a7023dd7a9ccd0bcca39aca49863e16d1ac709b392a6f36a50bfb" origin="Generated by Gradle"/>
+            <sha512 value="a202cc1b9f9393ee7d405b27c24dce06349dd106b0cb95ed26568a064243623989897b9b8ba50a61a83706eee6e7bc72930a511babf94d24e0f75a5672b2b3aa" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.ow2.asm" name="asm-commons" version="9.2">
          <artifact name="asm-commons-9.2.jar">
             <sha512 value="d5bd27f9b8b4eea93635ceda3891665fc9db273818eb02d40da4b110b81524458de3f71a63e87d6bec9423ba0f2e14c20ecdf7706dfeb54f0b05aedb13a63ecc" origin="Generated by Gradle"/>
@@ -3110,16 +3648,19 @@
       </component>
       <component group="org.ow2.asm" name="asm-commons" version="9.7.1">
          <artifact name="asm-commons-9.7.1.jar">
+            <sha256 value="9a579b54d292ad9be171d4313fd4739c635592c2b5ac3a459bbd1049cddec6a0" origin="Generated by Gradle"/>
             <sha512 value="81daf5765e387e6aeec5d45c4b9e4e1b471fb4f350931e5a214845c7c657a2142768f6902765e49c0ce2c595962e5d008883cba2e4a40c4bdce8f2e92518d2db" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.ow2.asm" name="asm-commons" version="9.8">
          <artifact name="asm-commons-9.8.jar">
+            <sha256 value="3301a1c1cb4c59fcc5292648dac1d7c5aed4c0f067dfbe88873b8cdfe77404f4" origin="Generated by Gradle"/>
             <sha512 value="d2add10e25416b701bd84651b42161e090df2f32940de5e06e0e2a41c6106734db2fe5136f661d8a8af55e80dc958bc7b385a1004f0ebe550828dfa1e9d70d41" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.ow2.asm" name="asm-commons" version="9.9">
          <artifact name="asm-commons-9.9.jar">
+            <sha256 value="db2f6f26150bbe7c126606b4a1151836bcc22a1e05a423b3585698bece995ff8" origin="Generated by Gradle"/>
             <sha512 value="4949cde2b51e5d171d0ff02ebd1f9f7f111bf538c8bfd62f139364181ee4bebd6598949d895f1c78daaba6dd1da4e564fab10e602cfe297915cd0287f8c2f1d5" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -3128,6 +3669,12 @@
             <sha512 value="261b39b5344c87a84d462373ae58b41a372f351150f592e46d620a64483621fae2b0fcd07f7c0d11973a8183a00119579bd84cd25a6a04e0cd82261f9760f8d4" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.ow2.asm" name="asm-tree" version="9.10">
+         <artifact name="asm-tree-9.10.jar">
+            <sha256 value="02a58618b38c7748e9ce4adff00d1080ced507f309e50b8643b703532ef347e0" origin="Generated by Gradle"/>
+            <sha512 value="e79414d8f657f5ef2fd4b39114451047a00b0dbf29aadc0811eea6b43c2a6b1bbb9c342fbc35af80c1be1994154d644852899df187345138b199d0bc11d8c5ec" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.ow2.asm" name="asm-tree" version="9.2">
          <artifact name="asm-tree-9.2.jar">
             <sha512 value="99291fbf7acb7589cc8426e6cfb22bdd99c0b14c9f2c96843f47cb0cdc2d2f2004a2400c80723562721f5f399a42eeb4d2d4b874c484b0dde974a5f1fa9b7639" origin="Generated by Gradle"/>
@@ -3135,16 +3682,19 @@
       </component>
       <component group="org.ow2.asm" name="asm-tree" version="9.7.1">
          <artifact name="asm-tree-9.7.1.jar">
+            <sha256 value="9929881f59eb6b840e86d54570c77b59ce721d104e6dfd7a40978991c2d3b41f" origin="Generated by Gradle"/>
             <sha512 value="e55008c392fdd35e95d3404766b12dd4b46e13d5c362fcd0ab42a65751a82737eaf0ebc857691d1916190d34407adfde4437615d69c278785416fd911e00978d" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.ow2.asm" name="asm-tree" version="9.8">
          <artifact name="asm-tree-9.8.jar">
+            <sha256 value="14b7880cb7c85eed101e2710432fc3ffb83275532a6a894dc4c4095d49ad59f1" origin="Generated by Gradle"/>
             <sha512 value="4493f573d9f0cfc8837db9be25a8b61a825a06aafc0e02f0363875584ff184a5a14600e53793c09866300859e44f153faffd0e050de4a7fba1a63b5fb010a9a7" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="org.ow2.asm" name="asm-tree" version="9.9">
          <artifact name="asm-tree-9.9.jar">
+            <sha256 value="42178f3775c9c63f9e5e1446747d29b4eca4d91bd6e75e5c43cfa372a47d38c6" origin="Generated by Gradle"/>
             <sha512 value="8b555d9166a17dcd0d1b297bd61fb3da59279b00a97fd7d0a3b139cb68ca8012ac14fb9bab0a6fa7ebe5612337f8e39b240d97b05a2c25ebc9ece15b7a1bc131" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -3153,6 +3703,12 @@
             <sha512 value="17346f9d37dc90956c451b841ac052aa9217a19b5fdd7744a497a35addfcdff8a5e7c42dcb192910685ec6161e7b29e6867b5f84764ee3850502ac48ba392009" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.ow2.asm" name="asm-util" version="9.10">
+         <artifact name="asm-util-9.10.jar">
+            <sha256 value="6c7ee48bc06a9abf13297a884797451bdb65ee6e16a59c6c5cc66642d487a139" origin="Generated by Gradle"/>
+            <sha512 value="fc35c248e92f137dc7eed4ff73d7536673cf3015d8cfa401533b022216fad09a31d09e9330632564b8f9609c335df9562d848428f71cb0431ec2996f5caf02d1" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.ow2.asm" name="asm-util" version="9.2">
          <artifact name="asm-util-9.2.jar">
             <sha512 value="b485d43e53e7247c8b9cb34efd51dffd0e81bd4618ba4ec7ed8479607d970b08c4e36d8c160ba526e87700fb96b53d4e5b1929d8c6620687e21d03d3ae9cf850" origin="Generated by Gradle"/>
@@ -3160,6 +3716,7 @@
       </component>
       <component group="org.ow2.asm" name="asm-util" version="9.7.1">
          <artifact name="asm-util-9.7.1.jar">
+            <sha256 value="f885be71b5c90556f5f1ad1c4f9276b29b96057c497d46666fe4ddbec3cb43c6" origin="Generated by Gradle"/>
             <sha512 value="522d793d15a2c5ea6504a50222cf0750f1eab7b881cf289675042539b1aba8b3868197b1bebe729de728dd10020eb028ae16252dcd5d84fdcbf7f925832bc269" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
@@ -3170,6 +3727,7 @@
       </component>
       <component group="org.ow2.asm" name="asm-util" version="9.9">
          <artifact name="asm-util-9.9.jar">
+            <sha256 value="3842e13cfe324ee9ab7cdc4914be9943541ead397c17e26daf0b8a755bede717" origin="Generated by Gradle"/>
             <sha512 value="cd4f82589e0acc801618e4f55de2e7b85718d30cf5a7d2e5ead383dcdc2689a934abea37b81f5a7c508d9f7fc9ceb2e8ae5c8e4e958537ebb80b621814b099fb" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -3181,33 +3739,39 @@
       <component group="org.reactivestreams" name="reactive-streams" version="1.0.4">
          <artifact name="reactive-streams-1.0.4.jar">
             <pgp value="50A628FFAF58480736B1079FD1031D14464180E0"/>
+            <sha256 value="f75ca597789b3dac58f61857b9ac2e1034a68fa672db35055a8fb4509e325f28" origin="Generated by Gradle"/>
             <sha512 value="cdab6bd156f39106cd6bbfd47df1f4b0a89dc4aa28c68c31ef12a463193c688897e415f01b8d7f0d487b0e6b5bd2f19044bf8605704b024f26d6aa1f4f9a2471" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.reflections" name="reflections" version="0.10.2">
          <artifact name="reflections-0.10.2.jar">
             <pgp value="3F2A008A91D11A7FAC4A0786F13D3E721D56BD54"/>
+            <sha256 value="938a2d08fe54050d7610b944d8ddc3a09355710d9e6be0aac838dbc04e9a2825" origin="Generated by Gradle"/>
             <sha512 value="d04700d4b6d3f28faa611e10ce863df1d6c82dfc6dd1b27cb910e44c19089ca08bef939e2bca7bc79274836f8e9d8801c4326232d24a38dba0a4893a20c7c42c" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.slf4j" name="jcl-over-slf4j" version="1.7.32">
          <artifact name="jcl-over-slf4j-1.7.32.jar">
+            <sha256 value="60f3bda5922e3912889cca1311d1b227753610bf60cb4e5e914e8b2eaa0326b4" origin="Generated by Gradle"/>
             <sha512 value="55b0678cbe5359d7fabcec55f305997170b0d45264b5cc0577cc9137ac2388a459b86c5438b5850d6e7247d3a00486f83f4b7e305b0eb756a52d3e5c5466ddbd" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.slf4j" name="jcl-over-slf4j" version="2.0.17">
          <artifact name="jcl-over-slf4j-2.0.17.jar">
+            <sha256 value="affd06771589ebfe454bb11315a4f466ecaa135b95f3e7939534cf1d2fd7064c" origin="Generated by Gradle"/>
             <sha512 value="7efb2771bad2e643b0e814cd78ab4f9af3ea166643700776618c397e9755ca11f4b7c00030562a619932c9d2ec5114fd253ece3abbc3db2f1a064431d8990733" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.slf4j" name="jul-to-slf4j" version="1.7.32">
          <artifact name="jul-to-slf4j-1.7.32.jar">
+            <sha256 value="6dee8d85ad6943aff0600f14897c469e64bae0413ee33a15c448af00432c0642" origin="Generated by Gradle"/>
             <sha512 value="b87e398ec42ea9948c295f18edc0cd65031132a18b6fa77bf299d897e7bae7a07ec34eb223025794070002f107dc7b708e6bea0c595ec32f1212c767c9e3240b" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.slf4j" name="slf4j-api" version="1.7.36">
          <artifact name="slf4j-api-1.7.36.jar">
             <pgp value="475F3B8E59E6E63AA78067482C7B12F2A511E325"/>
+            <sha256 value="d3ef575e3e4979678dc01bf1dcce51021493b4d11fb7f1be8ad982877c16a1c0" origin="Generated by Gradle"/>
             <sha512 value="f9b033fc019a44f98b16048da7e2b59edd4a6a527ba60e358f65ab88e0afae03a9340f1b3e8a543d49fa542290f499c5594259affa1ff3e6e7bf3b428d4c610b" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -3218,6 +3782,7 @@
       </component>
       <component group="org.slf4j" name="slf4j-api" version="2.0.17">
          <artifact name="slf4j-api-2.0.17.jar">
+            <sha256 value="7b751d952061954d5abfed7181c1f645d336091b679891591d63329c622eb832" origin="Generated by Gradle"/>
             <sha512 value="9a3e79db6666a6096a3021bb2e1d918f30f589d8de51d6b600f8ebd92515a510ae2d8f87919cc2dfa8365d64f10194cac8dfa0fb950160eef0e9da06f6caaeb9" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
          <artifact name="slf4j-api-2.0.17.pom">
@@ -3236,6 +3801,7 @@
       </component>
       <component group="org.slf4j" name="slf4j-simple" version="2.0.17">
          <artifact name="slf4j-simple-2.0.17.jar">
+            <sha256 value="ddfea59ac074c6d3e24ac2c38622d2d963895e17f70b38ed4bdae4d780be6964" origin="Generated by Gradle"/>
             <sha512 value="99d594ec1d3ca7c909166de22e09b857358f1e8aeec2338d615d0d25b8116d51fe510554ce3be204e90fce392ecb9080afbc0b1f1a3ddcd186c3ab160abe47f0" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -3251,18 +3817,42 @@
             <sha512 value="2b386b8ade4dd692b82a9eb6d8bb8830a185e91b099f034aec307996f3caa8158602ff0f7785eb251bfecf971a7adde1e546d50bd0cc0662db1433f73c05d903" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
+      <component group="org.sonarsource.scanner.gradle" name="sonarqube-gradle-plugin" version="7.3.0.8198">
+         <artifact name="sonarqube-gradle-plugin-7.3.0.8198.jar">
+            <sha256 value="cd00843dc609f5b08231388e1f7d83d13b42f01e1d9bbcf37510a6928f7cd278" origin="Generated by Gradle"/>
+            <sha512 value="89fffde18aef74d7844e7960e6ed503b8e2ac6d96a4e4b730efca2da8b326bf9424fc65b6b4a5c471d31b023d919099ad95226b823e6d28f73ce9c1187045c20" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
+      <component group="org.sonarsource.scanner.lib" name="sonar-scanner-download-cache" version="4.1.1.1633">
+         <artifact name="sonar-scanner-download-cache-4.1.1.1633.jar">
+            <sha256 value="ea4a37e5907186236b53cb679d416663112f5b2862893ca693ea7108e1a75927" origin="Generated by Gradle"/>
+            <sha512 value="8165d2ab4fe44cc1c7b22aa4698251c6186f132e4547e2a2ec4fb2768628009af0a370c486f290e75eb99f691c42a04517b9008c5247d101743c64831faade12" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.sonarsource.scanner.lib" name="sonar-scanner-java-library" version="3.3.1.450">
          <artifact name="sonar-scanner-java-library-3.3.1.450.jar">
             <pgp value="2B1042677FD8190C7B9FC0DC2161D72E7DCD4258"/>
             <sha512 value="31a5f2cc23973332f1be65e16ce40a7a67a971006297d4af2e0af384e7e5929f15312b67542f59caab67113bd59ef6b1e3fac942bea4d1df34e3e6d34c9c9016" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
+      <component group="org.sonarsource.scanner.lib" name="sonar-scanner-java-library" version="4.1.1.1633">
+         <artifact name="sonar-scanner-java-library-4.1.1.1633.jar">
+            <sha256 value="1f3d0263e4a49dffbf1683c18524357774628fe812cf907fd559bd68d551a562" origin="Generated by Gradle"/>
+            <sha512 value="7d3a7784543e1282d7abc0e96e9dceeeff402338758432d976df9c8ebfbfb981694a75c31afd721e2c6c0ad2b92c723fa3ec1e9621352a6141b93cdd981ef17d" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.sonarsource.scanner.lib" name="sonar-scanner-java-library-batch-interface" version="3.3.1.450">
          <artifact name="sonar-scanner-java-library-batch-interface-3.3.1.450.jar">
             <pgp value="2B1042677FD8190C7B9FC0DC2161D72E7DCD4258"/>
             <sha512 value="03b01056f5abd97674b0410c524d592d6d62a265e430cf8945ae495c0675add889edc302c9cc5611f8d4f71e0e7b94befcd98c3f72171c7587869bc9f68b0d80" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
+      <component group="org.sonarsource.scanner.lib" name="sonar-scanner-java-library-batch-interface" version="4.1.1.1633">
+         <artifact name="sonar-scanner-java-library-batch-interface-4.1.1.1633.jar">
+            <sha256 value="a080a9e0d8bf9f4293503f8802ce3c1b9455f1d8eb0a051b5e8f1cffb63c35ce" origin="Generated by Gradle"/>
+            <sha512 value="93e2b7a415eeb22ffa6a9fae3921b4c7094a09234266a42b0debb301d3a1ae50fcae408499ca49d7c7631df1b93328ff49e16c2ec634a57c273fc7a8b6c9c711" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.sonatype.oss" name="oss-parent" version="7">
          <artifact name="oss-parent-7.pom">
             <sha512 value="63b0951f793ee9d25239ee44760e4d51de3b8503e438e567862306f2d175019d8617eb854bc4ee2374c39f385e0a1094c3c7097f899b2074e4acda14fe6030fb" origin="Generated by Gradle" reason="Artifact is not signed"/>
@@ -3281,6 +3871,7 @@
       <component group="org.sonatype.plexus" name="plexus-build-api" version="0.0.7">
          <artifact name="plexus-build-api-0.0.7.jar">
             <pgp value="2BCBDD0F23EA1CAFCC11D4860374CF2E8DD1BDFD"/>
+            <sha256 value="934171640fbd3d2495c50b79b0d9adb11e2c83e65bad157df8fe34bcac0ff798" origin="Generated by Gradle"/>
             <sha512 value="e073d367ce5edaf6dfcbf6d1ec9f544082d4536aec8a84b060d24625c0d8ff1facf90529843f9bf4383ef43aa5cd3d0e143f473dffa6da7fd910f1d2e3872ec7" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -3296,23 +3887,27 @@
       </component>
       <component group="org.spockframework" name="spock-core" version="2.4-groovy-5.0">
          <artifact name="spock-core-2.4-groovy-5.0.jar">
+            <sha256 value="d3cfc2df3b8da2543feae65df5814fd5b79c82aabdbc72e223471d4d110fcac2" origin="Generated by Gradle"/>
             <sha512 value="46e144a93e1e43b9b5587b75c0f1cc04343a43b0d604f5b4d1720cd815596af9861126c3686987a7d64f78974e6b2a51526a5cc526e0aa76a94c91202f6d5c2f" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.spockframework" name="spock-junit4" version="2.4-groovy-5.0">
          <artifact name="spock-junit4-2.4-groovy-5.0.jar">
+            <sha256 value="c2c1776d4fe7f1356afeabe6ffae138db5ac832ddf4a0504c32ee8343202aa04" origin="Generated by Gradle"/>
             <sha512 value="059db8cf3c308d1b85e18ec08d74b95df6dd092fdb3328fed820648aed2fb55bfc7473ddb25729cf15e364d172717aca8162c45bca83c9fd9c1d1f70502db7dd" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.testng" name="testng" version="7.12.0">
          <artifact name="testng-7.12.0.jar">
             <pgp value="C4F54D8622C95CC3F098721A0F13D5631D6AF36D"/>
+            <sha256 value="5147e65e0bf0d0f9c7f18a4b2b182d3e4efb7391195e130a64ca9f755e0a6d33" origin="Generated by Gradle"/>
             <sha512 value="3a4d587c6de2fb110d219c94ba2b139f5a041715d27cd5d5bba104785205d42f475a076c3a623f4f7f66553a6ff474fa4b7c95b28aea554a1387ba2dbabebc68" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.tukaani" name="xz" version="1.6">
          <artifact name="xz-1.6.jar">
             <pgp value="3690C240CE51B4670D30AD1C38EE757D69184620"/>
+            <sha256 value="a594643d73cc01928cf6ca5ce100e094ea9d73af760a5d4fb6b75fa673ecec96" origin="Generated by Gradle"/>
             <sha512 value="81b6b4b2cc8036334859a9503abecbefc2ebaeca0cd2deecac69e4b7bd375fe4e6d7eebe25cbd06eab433796e574fe6c9c38d3770e887b133671d74368c46920" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -3324,14 +3919,17 @@
       <component group="org.webjars" name="jquery" version="3.7.1">
          <artifact name="jquery-3.7.1.jar">
             <pgp value="82F94BBDF95C247BBD21396B9A0B94DEC0FFA7EE"/>
+            <sha256 value="262016dd3a559df87aefbe392804e9bf620787c9204c0ab8522d4c231ea65097" origin="Generated by Gradle"/>
             <sha512 value="a15af2262b4bf3f465310877a2e57b8efe6c0654abcd35ac3614d1b79666628786224e1dc19857bded72bc02b9a21cd437adffbed34f21050f9b348a07b11a7d" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.xmlresolver" name="xmlresolver" version="5.3.3">
          <artifact name="xmlresolver-5.3.3-data.jar">
+            <sha256 value="b0c487ad2f3e558be8d829c916d2458d10aca6a5bafa7a4d0524b70845e48a5c" origin="Generated by Gradle"/>
             <sha512 value="3968f78e0c36009f9bbb6e6ce3c0b95a91f6f723a71d93ef9855fe4de674a22c7fc0d426d0bf95d4cdfed4b2cd8213ab8a21d235f64cdd8add9729bac948af8c" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
          <artifact name="xmlresolver-5.3.3.jar">
+            <sha256 value="1fe4d5b92f708dcdb82dbce12919e0171e6b5ca62c6dca6220483625098feb5f" origin="Generated by Gradle"/>
             <sha512 value="e426f802202b69004b94d7ff67c907b1e10e3005854ed4b9fcf4898a8f727c782e06da58ebc746345e9ed30881a6006c8d588e604f3fd28a107b49f55a632f0a" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -3344,6 +3942,7 @@
       <component group="org.yaml" name="snakeyaml" version="2.5">
          <artifact name="snakeyaml-2.5.jar">
             <pgp value="2FC53E6B1F681184F4CCD637F5C81DE10A0B8ECC"/>
+            <sha256 value="e6682acf1ace77508ef13649cbf4f8d09d2cf5457bdb61d25ffb6ac0233d78dd" origin="Generated by Gradle"/>
             <sha512 value="a69bea3ae0ed31b12d9fa23bf1cd3fb71bae88e231d9657f0291e3000ae17a1df50709e072134f9155158f488eba67a3f8daf879462499f07b07d9239e78933e" origin="Generated by Gradle"/>
          </artifact>
       </component>
@@ -3357,26 +3956,31 @@
       </component>
       <component group="org.ysb33r.gradle" name="grolifant-core" version="3.0.1">
          <artifact name="grolifant-core-3.0.1.jar">
+            <sha256 value="e657fb921fb94e8fdc4c20890121cb1663f1e7efafd6b93a6cdf363a959d1201" origin="Generated by Gradle"/>
             <sha512 value="8b962d4d58cb844aad51a5feac55ab9dfd2b7fa116e3dd2dc97014fd837af0e9a0ae2f48f8e26bc2fc65a93a7cce26b12bf853ebc1398c3da40b8c70b772dffe" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.ysb33r.gradle" name="grolifant-herd" version="3.0.1">
          <artifact name="grolifant-herd-3.0.1.jar">
+            <sha256 value="72704bbbc99b94afca10b3c9faf60e26e1f3b8f4cb1390c25225718c239bf54e" origin="Generated by Gradle"/>
             <sha512 value="e9c018ce99e730b6bb910236220b4d2cac246f2e2604c0a24fbe7d6569bd5f8b2e5544672e97c757fae00dee0428b367f5a45122a66d14ba9881137016a7f174" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.ysb33r.gradle" name="grolifant-rawhide" version="3.0.1">
          <artifact name="grolifant-rawhide-3.0.1.jar">
+            <sha256 value="6fd8c91582bd21842049fa65f92d1d404dd90027d98d140b212889d83c0ef9b0" origin="Generated by Gradle"/>
             <sha512 value="b127443cfc8f1dca6f84af58c0ff6a0ccb10b1d97cc8073976b60b938b7f8230733fc0e873e358856fb26c704e55432615e326bb99c807d235c0a4754b62327d" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.ysb33r.gradle" name="grolifant40" version="3.0.1">
          <artifact name="grolifant40-3.0.1.jar">
+            <sha256 value="f62885fc1d51a8575e5b33ab486e81cafc2f3b4e2081e5eb1ab22bebe4a44bdd" origin="Generated by Gradle"/>
             <sha512 value="7a4d7804e75fc495c3f36470a9be91d191a86391fe3bf48b55a64e9e2f050a6c322d4b9b1213afcae310fb581e56e5f7118cc0b2625a271fcf54e37a98bd6467" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.ysb33r.gradle" name="grolifant40-legacy-api" version="3.0.1">
          <artifact name="grolifant40-legacy-api-3.0.1.jar">
+            <sha256 value="d95dbc68603c66e312e493134e45cf2ed5f9d7bed05ea91445d8f50e2f7f98a6" origin="Generated by Gradle"/>
             <sha512 value="3c1986e1e038261214a60b21abea18c494efaac025d71500475d3d4768784f500678e4a8ba487682a4a3c021cb981ac8f835b8c384eff2ec5204610f546c0d87" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -3412,21 +4016,25 @@
       </component>
       <component group="org.ysb33r.gradle" name="grolifant50" version="3.0.1">
          <artifact name="grolifant50-3.0.1.jar">
+            <sha256 value="017ea14183731aaab3adaaa229bc4035f1ed087ae08ad2f9ec6082bc5b19e8eb" origin="Generated by Gradle"/>
             <sha512 value="f552ff34241e020c0feabde7d493b76c6d951399d13e7e5f00d29127cfc082a8b00d00c5c3965d4c9e7b24fda78cc8f82719b3f2cc88c38710b2180f4b9a5760" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.ysb33r.gradle" name="grolifant60" version="3.0.1">
          <artifact name="grolifant60-3.0.1.jar">
+            <sha256 value="2511430c6915e9875d40f03932d0c940ca264b84b60d6e36770ba2580b4a21bf" origin="Generated by Gradle"/>
             <sha512 value="6805937e591310b79a27c48b7e5b256e33713e283059093dfc872de412a12c2daea77e4c25428cdf29e1fc38b666bc050ea2700a08526139d6223e48abcf7a2f" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.ysb33r.gradle" name="grolifant70" version="3.0.1">
          <artifact name="grolifant70-3.0.1.jar">
+            <sha256 value="56b5e33a5ea41c9a0a49eb37ecb3bd6a08f4abd2d180eb73ae9d6ef36a01afc4" origin="Generated by Gradle"/>
             <sha512 value="8d09410e361bcd6fbbc93ee949b100effe981bc9be6aef3a0cb5c479a034ff77e21d32235f198776e9cfdcdfe6727385ee0be4e7a630c9a1e7c7087cf332ce19" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
       <component group="org.ysb33r.gradle" name="grolifant80" version="3.0.1">
          <artifact name="grolifant80-3.0.1.jar">
+            <sha256 value="5f2ecbabed7b4b7ae4848fcb51872cbed4bf58aea22b53ab2e159eca462bfdf2" origin="Generated by Gradle"/>
             <sha512 value="689e9bb4d411ec30266a2e55ce46f33b790b3b8a5b0834033dc1526f700c9296d0e443d88d8f1b65921f5120ce560c8a55abd113b8648c67e566aa6729490043" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -3442,12 +4050,14 @@
       </component>
       <component group="prevayler" name="prevayler" version="2.02.005">
          <artifact name="prevayler-2.02.005.jar">
+            <sha256 value="afb45096ef36cdd2b93c94c15dad3acbdc30c3b96de59c60b47a54eb6ba09317" origin="Generated by Gradle"/>
             <sha512 value="d2c06132fbde811e59e58fe1c4a303e3ca6bf79ec845caf125b181d14f5123741f93b33f59daf0f1e3089949ffc4ca6432920ee43520281e835b36e43af23677" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="xerces" name="xercesImpl" version="2.12.2">
          <artifact name="xercesImpl-2.12.2.jar">
             <pgp value="6CB87B18A453990EAC9453F87D713008CC07E9AD"/>
+            <sha256 value="6fc991829af1708d15aea50c66f0beadcd2cfeb6968e0b2f55c1b0909883fe16" origin="Generated by Gradle"/>
             <sha512 value="bfd21f2350bf0bb546a68d3303f28c6a15cee1e630138c169344c3f65fe39a15e61c6ff4e5239f38f2f1f9e488eff4d5565a4a0774263064ab6a30aa9fcaaed3" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
          </artifact>
       </component>
@@ -3459,17 +4069,20 @@
       <component group="xml-apis" name="xml-apis" version="1.4.01">
          <artifact name="xml-apis-1.4.01.jar">
             <pgp value="2DB4F1EF0FA761ECC4EA935C86FDC7E2A11262CB"/>
+            <sha256 value="a840968176645684bb01aed376e067ab39614885f9eee44abe35a5f20ebe7fad" origin="Generated by Gradle"/>
             <sha512 value="8db0283b6840cd6407957d296b802e3edf90653e2722f8e29f86c1c0b60996c4b43e9e065e6864dab89b2138ddb0174d9b4fdda4a93f94eeb884783db82f3268" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="xmlpull" name="xmlpull" version="1.1.3.1">
          <artifact name="xmlpull-1.1.3.1.jar">
+            <sha256 value="34e08ee62116071cbb69c0ed70d15a7a5b208d62798c59f2120bb8929324cb63" origin="Generated by Gradle"/>
             <sha512 value="54d1090623497e81270b2af633268656e8855e1edce2217886431039516a391ba9f8d8db3c21a0b5e51c7f7cb672d63ebe77be75708b760b06f399486960f261" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
       <component group="xmlunit" name="xmlunit" version="1.6">
          <artifact name="xmlunit-1.6.jar">
             <pgp value="CE8075A251547BEE249BC151A2115AE15F6B8B72"/>
+            <sha256 value="f715ce826b7d39f0e3d5accd7c50c91dd668ce1f016487c1a16ee76cf3e00a74" origin="Generated by Gradle"/>
             <sha512 value="2efcdaa75fefe588f58fdade622e38cdc3b99607b97b79e8654d6e104706a258ba2da6f48180db629e91b7f743d1cdbf5a3154947d4e57732dac50200a00893d" origin="Generated by Gradle" reason="Artifact is not signed"/>
          </artifact>
       </component>
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/CacheableCallSite.java b/src/main/java/org/codehaus/groovy/vmplugin/v8/CacheableCallSite.java
index bd8309b5c1..57d726e34f 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/CacheableCallSite.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/CacheableCallSite.java
@@ -18,23 +18,24 @@
  */
 package org.codehaus.groovy.vmplugin.v8;
 
-import org.apache.groovy.util.SystemUtil;
-import org.codehaus.groovy.runtime.DefaultGroovyMethods;
-import org.codehaus.groovy.runtime.memoize.MemoizeCache;
-
 import java.io.Serial;
 import java.lang.invoke.MethodHandle;
 import java.lang.invoke.MethodHandles;
 import java.lang.invoke.MethodType;
 import java.lang.invoke.MutableCallSite;
 import java.lang.ref.SoftReference;
+import java.util.Arrays;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.function.UnaryOperator;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+import org.apache.groovy.util.SystemUtil;
+import org.codehaus.groovy.runtime.DefaultGroovyMethods;
+import org.codehaus.groovy.runtime.memoize.MemoizeCache;
 
 /**
  * Represents a cacheable call site, which manages a multi-level caching hierarchy for dynamic method dispatch.
@@ -69,14 +70,39 @@ public class CacheableCallSite extends MutableCallSite {
     private static final float LOAD_FACTOR = 0.75f;
     private static final int INITIAL_CAPACITY = (int) Math.ceil(CACHE_SIZE / LOAD_FACTOR) + 1;
     private final MethodHandles.Lookup lookup;
+    /**
+     * Stores the most recently accessed entry.
+     * <p>
+     * <b>Concurrency:</b> Marked as {@code volatile} to ensure thread-safe publication of the entry
+     * across different threads, allowing {@link #get(Object)} to remain lock-free.
+     */
     private volatile MRUEntry mruEntry;
     private final AtomicLong fallbackCount = new AtomicLong();
     private final AtomicLong fallbackRound = new AtomicLong();
     private MethodHandle defaultTarget;
     private MethodHandle fallbackTarget;
+    /**
+     * The direct target of the call site before global guards are applied.
+     * <p>
+     * <b>Concurrency:</b> {@code volatile} ensures that updates to the PIC chain are immediately
+     * visible to all threads during high-speed dispatch.
+     */
     private volatile MethodHandle picChain;
-    private Object[] picKeys;
-    private int picCount;
+
+    /**
+     * Keys corresponding to the handles in the {@link #picChain}.
+     * <p>
+     * <b>Concurrency:</b> {@code final} for safe visibility during concurrent lookups.
+     */
+    private final Object[] picKeys;
+
+    /**
+     * The number of active entries in the PIC.
+     * <p>
+     * <b>Concurrency:</b> {@code volatile} for safe visibility. Modifications are further
+     * protected by {@code synchronized} blocks to ensure atomicity.
+     */
+    private volatile int picCount;
     private final Map<Object, SoftReference<MethodHandleWrapper>> lruCache =
             new LinkedHashMap<Object, SoftReference<MethodHandleWrapper>>(INITIAL_CAPACITY, LOAD_FACTOR, true) {
                 @Serial private static final long serialVersionUID = 7785958879964294463L;
@@ -101,6 +127,7 @@ public class CacheableCallSite extends MutableCallSite {
      */
     public CacheableCallSite(MethodType type, MethodHandles.Lookup lookup) {
         super(type);
+        this.picKeys = new Object[IndyInterface.INDY_PIC_SIZE];
         this.lookup = lookup;
     }
 
@@ -120,6 +147,9 @@ public class CacheableCallSite extends MutableCallSite {
 
     /**
      * Returns a cached method-handle wrapper for the receiver class, computing and storing it if needed.
+     * <p>
+     * <b>Concurrency:</b> Synchronizes on {@link #lruCache} to protect the non-thread-safe
+     * {@link LinkedHashMap} and to ensure that a missing entry is only computed once.
      *
      * @param key the receiver cache key
      * @param valueProvider the provider used to compute a missing entry
@@ -174,6 +204,8 @@ public class CacheableCallSite extends MutableCallSite {
 
     /**
      * Stores a method-handle wrapper under the supplied cache key.
+     * <p>
+     * <b>Concurrency:</b> Synchronizes on {@link #lruCache} for thread-safe access to the underlying map.
      *
      * @param key the receiver cache key
      * @param mhw the wrapper to cache
@@ -190,15 +222,63 @@ public class CacheableCallSite extends MutableCallSite {
         }
     }
 
-    public void recordInPic(Object key, int maxPicSize) {
-        if (picKeys == null) picKeys = new Object[maxPicSize];
+    /**
+     * Promotes a new receiver shape to the PIC if it is not already present and space is available.
+     * <p>
+     * <b>Concurrency:</b> Synchronizes on {@code this} to atomically manage the
+     * promotion of receiver shapes into the PIC chain. This prevents multiple threads
+     * from corrupting the chain metadata or redundant JIT invalidations.
+     *
+     * @param key the receiver cache key
+     * @param updater the callback used to build the new PIC link
+     */
+    public void maybeUpdatePic(Object key, UnaryOperator<MethodHandle> updater) {
+        synchronized (this) {
+            for (int i = 0; i < picCount; i++) {
+                if (picKeys[i] == key) return;
+            }
+            if (picCount < picKeys.length) {
+                MethodHandle currentChain = picChain != null ? picChain : defaultTarget;
+                MethodHandle newChain = updater.apply(currentChain);
+                if (newChain != null) {
+                    picChain = newChain;
+                    picKeys[picCount++] = key;
+                }
+            }
+        }
+    }
+
+    /**
+     * Resets the PIC and targets to the default state if not already reset.
+     * <p>
+     * <b>Concurrency:</b> Synchronizes on {@code this} to safely reset the
+     * target and PIC metadata when the site becomes too megamorphic.
+     */
+    public void resetPicAndTarget() {
+        synchronized (this) {
+            if (getTarget() != defaultTarget) {
+                setTarget(defaultTarget);
+                resetFallbackCount();
+            }
+        }
+    }
+
+    public synchronized void recordInPic(Object key) {
         if (picCount < picKeys.length) {
             picKeys[picCount++] = key;
         }
     }
 
-    public boolean picIncludes(Object key) {
-        if (picKeys == null) return false;
+    /**
+     * Checks if a receiver shape is already present in the PIC.
+     * <p>
+     * <b>Concurrency:</b> Marked as {@code synchronized} to prevent reading inconsistent state
+     * while the PIC is being updated.
+     *
+     * @param key the receiver cache key
+     * @return {@code true} if the key is in the PIC
+     */
+    public synchronized boolean picIncludes(Object key) {
         for (int i = 0; i < picCount; i++) {
             if (picKeys[i] == key) return true;
         }
@@ -213,7 +293,7 @@ public class CacheableCallSite extends MutableCallSite {
         this.picChain = picChain;
     }
 
-    public int getPicCount() {
+    public synchronized int getPicCount() {
         return picCount;
     }
 
@@ -245,12 +325,16 @@ public class CacheableCallSite extends MutableCallSite {
 
     /**
      * Resets the fallback count and advances the fallback round marker.
+     * <p>
+     * <b>Concurrency:</b> Marked as {@code synchronized} to atomically clear all PIC-related
+     * state, ensuring threads see a consistent "empty" state.
      */
-    public void resetFallbackCount() {
+    public synchronized void resetFallbackCount() {
         fallbackCount.set(0);
+        fallbackRound.incrementAndGet();
         picCount = 0;
         picChain = null;
-        picKeys = null;
+        Arrays.fill(picKeys, null);
     }
 
     /**
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java b/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java
index bb952b1036..982b088e80 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java
@@ -60,7 +60,7 @@ public class IndyInterface {
     private static final long INDY_OPTIMIZE_THRESHOLD = SystemUtil.getLongSafe("groovy.indy.optimize.threshold", 1_000L);
     private static final long INDY_FALLBACK_THRESHOLD = SystemUtil.getLongSafe("groovy.indy.fallback.threshold", 1_000L);
     private static final long INDY_FALLBACK_CUTOFF = SystemUtil.getLongSafe("groovy.indy.fallback.cutoff", 100L);
-    private static final int INDY_PIC_SIZE = SystemUtil.getIntegerSafe("groovy.indy.pic.size", 4);
+    static final int INDY_PIC_SIZE = SystemUtil.getIntegerSafe("groovy.indy.pic.size", 4);
 
     /**
      * Flags for method and property calls.
@@ -201,8 +201,11 @@ public class IndyInterface {
 
     /**
      * Shared switch point invalidated when metaclass state changes.
+     * <p>
+     * <b>Concurrency:</b> {@code volatile} ensures that global invalidations are immediately
+     * visible to all threads across the JVM, causing them to fall back from JIT-optimized handles.
      */
-    protected static SwitchPoint switchPoint = new SwitchPoint();
+    protected static volatile SwitchPoint switchPoint = new SwitchPoint();
 
     static {
         GroovySystem.getMetaClassRegistry().addMetaClassRegistryChangeEventListener(cmcu -> invalidateSwitchPoints());
@@ -210,6 +213,10 @@ public class IndyInterface {
 
     /**
      * Callback for constant metaclass update change
+     * <p>
+     * <b>Concurrency:</b> Synchronizes on {@code IndyInterface.class} to atomically replace
+     * the global switch point and invalidate the old one, preventing race conditions during
+     * simultaneous MetaClass changes.
      */
     protected static void invalidateSwitchPoints() {
         if (LOG_ENABLED) {
@@ -426,24 +433,17 @@ public class IndyInterface {
             }
         } else {
             Object receiverKey = receiverCacheKey(arguments[0]);
-            if (!callSite.picIncludes(receiverKey) && callSite.getPicCount() < INDY_PIC_SIZE) {
+            callSite.maybeUpdatePic(receiverKey, picChain -> {
                 Selector selector = Selector.getSelector(callSite, sender, methodName, callID, safeNavigation, thisCall, spreadCall, arguments);
                 selector.skipSwitchPoint = true;
-                MethodHandle picChain = callSite.getPicChain();
-                if (picChain == null) picChain = callSite.getDefaultTarget();
                 selector.fallback = picChain;
                 selector.setCallSiteTarget();
-
-                MethodHandle newChain = selector.handle;
-                callSite.setPicChain(newChain);
-
                 // wrap with top-level SwitchPoint guard
-                MethodHandle target = switchPoint.guardWithTest(newChain, callSite.getDefaultTarget());
+                MethodHandle target = switchPoint.guardWithTest(selector.handle, callSite.getDefaultTarget());
                 callSite.setTarget(target);
-                callSite.recordInPic(receiverKey, INDY_PIC_SIZE);
-
                 if (LOG_ENABLED) LOG.info("call site target updated with PIC link, pic size: " + callSite.getPicCount());
-            }
+                return selector.handle;
+            });
         }
         mhw.resetLatestHitCount();
     }
@@ -467,9 +467,17 @@ public class IndyInterface {
         MethodHandle defaultTarget = callSite.getDefaultTarget();
         long fallbackCount = callSite.incrementFallbackCount();
         if ((fallbackCount > INDY_FALLBACK_THRESHOLD) && (callSite.getTarget() != defaultTarget)) {
-            callSite.setTarget(defaultTarget);
-            if (LOG_ENABLED) LOG.info("call site target reset to default, preparing outside invocation");
-            callSite.resetFallbackCount();
+            /**
+             * <b>Concurrency:</b> Synchronizes on the {@code callSite} to safely reset the
+             * target and PIC metadata when the site becomes too megamorphic.
+             */
+            synchronized (callSite) {
+                if (callSite.getTarget() != defaultTarget) {
+                    callSite.setTarget(defaultTarget);
+                    if (LOG_ENABLED) LOG.info("call site target reset to default, preparing outside invocation");
+                    callSite.resetFallbackCount();
+                }
+            }
         }
 
         if (callSite.getTarget() == defaultTarget) {
diff --git a/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyInterfaceCallSiteTargetTest.groovy b/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyInterfaceCallSiteTargetTest.groovy
index b9a760cd63..3655958308 100644
--- a/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyInterfaceCallSiteTargetTest.groovy
+++ b/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyInterfaceCallSiteTargetTest.groovy
@@ -141,6 +141,16 @@ final class IndyInterfaceCallSiteTargetTest {
         assertFallbackCutoffLeavesDefaultTarget(false)
     }
 
+    @Test
+    void testResetFallbackCountAdvancesRound() {
+        CacheableCallSite callSite = newCallSite(MethodType.methodType(Object, Object))
+        assertEquals(0L, callSite.fallbackRound.get())
+        callSite.resetFallbackCount()
+        assertEquals(1L, callSite.fallbackRound.get())
+        callSite.resetFallbackCount()
+        assertEquals(2L, callSite.fallbackRound.get())
+    }
+
     @Test
     void testFromCacheHandleSkipsTargetChangesWhenCachedWrapperCannotSetTarget() {
         MethodType type = MethodType.methodType(Object, IndyInterfaceCallSiteTargetTest)


(groovy) 04/06: GROOVY-12023: adding documentation created by AI

Posted by bl...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

blackdrag pushed a commit to branch feature/Cache_changes
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit b48a20670be45316886edd564428e3f33e9ee9a9
Author: Jochen Theodorou <bl...@gmx.org>
AuthorDate: Wed May 20 11:05:07 2026 +0200

    GROOVY-12023: adding documentation created by AI
---
 ARCHITECTURE.md                                    | 20 +++++++++++++++++
 .../groovy/vmplugin/v8/CacheableCallSite.java      | 25 +++++++++++++++++++++-
 .../codehaus/groovy/vmplugin/v8/IndyInterface.java | 19 ++++++++++++----
 .../codehaus/groovy/vmplugin/v8/package-info.java  | 10 ++++++++-
 4 files changed, 68 insertions(+), 6 deletions(-)

diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md
index a6534b926a..4fea015398 100644
--- a/ARCHITECTURE.md
+++ b/ARCHITECTURE.md
@@ -90,6 +90,26 @@ The phase enum is the right anchor for any documentation that talks
 about "when X happens during compilation". Quoting the phase names
 verbatim keeps the reference precise; paraphrasing tends to drift.
 
+## Runtime: invokedynamic (Indy)
+
+Since Groovy 2.0, dynamic method dispatch can be performed using the `invokedynamic`
+instruction. The core of this implementation lives in `org.codehaus.groovy.vmplugin.v8`.
+
+| Class | Role |
+|---|---|
+| `IndyInterface` | Bootstrap methods and optimization lifecycle management. |
+| `CacheableCallSite` | The stateful call site holding the PIC chain, MRU entry, and LRU cache. |
+| `Selector` | Logic for finding the target method/property and constructing the guarded `MethodHandle`. |
+| `MethodHandleWrapper` | Combines a `MethodHandle` with metadata like hit counts and target description. |
+
+### Caching Hierarchy
+To maximize performance, `CacheableCallSite` uses three levels of caching:
+1. **PIC Chain (Level 1)**: A bounded chain of guarded handles in the call-site target (JIT-optimized).
+2. **MRU Entry (Level 2)**: A lock-free volatile field for the most recent hit shape.
+3. **LRU Cache (Level 3)**: A synchronized, soft-referenced map for megamorphic fallback.
+
+Detailed technical documentation of this hierarchy can be found in the Javadoc of `CacheableCallSite`.
+
 ### Parser (phase 2)
 
 - Grammar lives in `src/antlr/GroovyLexer.g4` and
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/CacheableCallSite.java b/src/main/java/org/codehaus/groovy/vmplugin/v8/CacheableCallSite.java
index 87ba5573f1..bd8309b5c1 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/CacheableCallSite.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/CacheableCallSite.java
@@ -37,7 +37,30 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 /**
- * Represents a cacheable call site, which can reduce the cost of resolving methods
+ * Represents a cacheable call site, which manages a multi-level caching hierarchy for dynamic method dispatch.
+ * <p>
+ * To minimize the overhead of dynamic method selection and invocation, this class maintains three levels of caching:
+ * <ol>
+ *   <li><b>Level 1: Polymorphic Inline Cache (PIC) Chain</b>:
+ *       A site-local, bounded chain of guarded method handles (default size 4) stored directly in the {@link #getTarget() target}.
+ *       This is the fastest path, allowing the JVM's JIT compiler to inline calls for the hottest receiver shapes.
+ *       It is managed via {@link #getPicChain()} and updated by {@code IndyInterface.optimizeCallSite}.
+ *   </li>
+ *   <li><b>Level 2: Most Recently Used (MRU) Entry</b>:
+ *       A {@code volatile} field {@link #mruEntry} that stores a single {@link MethodHandleWrapper} for the most recently successful hit.
+ *       Accessed via {@link #get(Object)}, it provides a lock-free path for monomorphic or low-polymorphic call sites
+ *       that fall through the PIC chain. It uses identity-based keys to avoid allocations.
+ *   </li>
+ *   <li><b>Level 3: Least Recently Used (LRU) Cache</b>:
+ *       A synchronized {@link LinkedHashMap} {@link #lruCache} (default size 8) that stores {@link SoftReference}s to
+ *       {@link MethodHandleWrapper}s. This serves as the megamorphic fallback, preventing full re-selection
+ *       for shapes that have been seen before but are not currently in the PIC or MRU.
+ *   </li>
+ * </ol>
+ * <p>
+ * <b>Leak-Awareness:</b> To prevent permanent ClassLoader leaks, Level 2 (MRU) uses strong references only when
+ * the target class belongs to a safe ClassLoader (same or parent). Level 3 (LRU) always uses {@link SoftReference}s
+ * to allow the JVM to reclaim Metaspace under memory pressure.
  *
  * @since 3.0.0
  */
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java b/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java
index 6943533faa..bb952b1036 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java
@@ -40,10 +40,21 @@ import java.util.stream.Stream;
 
 /**
  * Bytecode level interface for bootstrap methods used by invokedynamic.
- * This class provides a logging ability by using the boolean system property
- * groovy.indy.logging. Other than that this class contains the
- * interfacing methods with bytecode for invokedynamic as well as some helper
- * methods and classes.
+ * <p>
+ * This class provides the core logic for the {@code invokedynamic} (Indy) support in Groovy.
+ * It handles the bootstrap process, method selection via {@link Selector}, and the
+ * optimization lifecycle of {@link CacheableCallSite}.
+ * <p>
+ * <b>Optimization Lifecycle:</b>
+ * <ol>
+ *   <li><b>Bootstrap:</b> The JVM calls one of the bootstrap methods (e.g., {@code bootstrap}) when an {@code invokedynamic} instruction is first encountered.</li>
+ *   <li><b>Initial Linkage:</b> The call site is initialized with a fallback target (adapter pointing to {@link #fromCacheHandle}).</li>
+ *   <li><b>Execution & Selection:</b> On first execution, {@code fromCacheHandle} uses a {@link Selector} to find the target method and create a guarded {@link java.lang.invoke.MethodHandle}.</li>
+ *   <li><b>Promotion & PIC:</b> After reaching {@link #INDY_OPTIMIZE_THRESHOLD} hits for a stable shape, {@link #optimizeCallSite} promotes the handle into a
+ *       Polymorphic Inline Cache (PIC) chain directly in the call site target for maximum JIT optimization.</li>
+ * </ol>
+ * <p>
+ * Logging can be enabled using the system property {@code groovy.indy.logging=true}.
  */
 public class IndyInterface {
     private static final long INDY_OPTIMIZE_THRESHOLD = SystemUtil.getLongSafe("groovy.indy.optimize.threshold", 1_000L);
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/package-info.java b/src/main/java/org/codehaus/groovy/vmplugin/v8/package-info.java
index e2ade9541b..5c78d5a160 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/package-info.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/package-info.java
@@ -18,6 +18,14 @@
  */
 
 /**
- * Java 8 VM plugin. Compatibility layer for Java 8 features (lambdas, streams).
+ * Java 8 VM plugin. Compatibility layer for Java 8 features and core implementation of {@code invokedynamic} (Indy) support.
+ * <p>
+ * This package contains the runtime infrastructure for Groovy's dynamic method dispatch using the {@code invokedynamic}
+ * instruction. Key components include:
+ * <ul>
+ *   <li>{@link org.codehaus.groovy.vmplugin.v8.IndyInterface}: The entry point for bootstrap methods and call-site optimization logic.</li>
+ *   <li>{@link org.codehaus.groovy.vmplugin.v8.CacheableCallSite}: Manages the multi-level caching hierarchy (PIC, MRU, LRU) to minimize dispatch overhead.</li>
+ *   <li>{@link org.codehaus.groovy.vmplugin.v8.Selector}: Responsible for dynamic method selection, handle creation, and guard generation.</li>
+ * </ul>
  */
 package org.codehaus.groovy.vmplugin.v8;


(groovy) 03/06: GROOVY-12023: add tests to ensure PIC functionality and fix one existing test since the fallback logic changed

Posted by bl...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

blackdrag pushed a commit to branch feature/Cache_changes
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 539e4a47a201ac7e7986f01fe05985edb9d092d9
Author: Jochen Theodorou <bl...@gmx.org>
AuthorDate: Wed May 20 10:41:44 2026 +0200

    GROOVY-12023: add tests to ensure PIC functionality and fix one existing test since the fallback logic changed
---
 .../vmplugin/v8/IndyClassLoaderLeakTest.groovy     | 63 +++++++++++++++++
 .../v8/IndyInterfaceCallSiteTargetTest.groovy      | 78 ++++++----------------
 .../groovy/vmplugin/v8/IndyInterfacePicTest.groovy | 72 ++++++++++++++++++++
 3 files changed, 157 insertions(+), 56 deletions(-)

diff --git a/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyClassLoaderLeakTest.groovy b/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyClassLoaderLeakTest.groovy
new file mode 100644
index 0000000000..35c81eff3d
--- /dev/null
+++ b/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyClassLoaderLeakTest.groovy
@@ -0,0 +1,63 @@
+package org.codehaus.groovy.vmplugin.v8
+
+import org.junit.jupiter.api.Test
+import java.lang.invoke.MethodType
+import static org.junit.jupiter.api.Assertions.*
+
+final class IndyClassLoaderLeakTest {
+
+    @Test
+    void testMruLeakAwareness() {
+        MethodType type = MethodType.methodType(Object, Object)
+        CacheableCallSite callSite = new CacheableCallSite(type, java.lang.invoke.MethodHandles.lookup())
+
+        // 1. Same ClassLoader (Safe)
+        def sameLoaderObj = new Object()
+        Object key1 = IndyInterface.receiverCacheKey(sameLoaderObj)
+        // Simulate a successful lookup that calls updateMRU
+        updateMRU(callSite, key1, sameLoaderObj.class, this.class)
+        assertNotNull(callSite.mruEntry, "MRU should be populated for same loader")
+
+        // 2. Different (Child) ClassLoader (Unsafe)
+        def gcl = new GroovyClassLoader()
+        def childClass = gcl.parseClass("class Child { def foo() {} }")
+        def childObj = childClass.newInstance()
+
+        // Reset MRU
+        callSite.mruEntry = null
+
+        Object key2 = IndyInterface.receiverCacheKey(childObj)
+        updateMRU(callSite, key2, childObj.class, this.class)
+        assertNull(callSite.mruEntry, "MRU should NOT be populated for child loader to avoid leaks")
+    }
+
+    @Test
+    void testIdentityKeyIsolation() {
+        def gcl1 = new GroovyClassLoader()
+        def gcl2 = new GroovyClassLoader()
+
+        String script = "class Target {}"
+        Class class1 = gcl1.parseClass(script)
+        Class class2 = gcl2.parseClass(script)
+
+        assertNotSame(class1, class2)
+        assertEquals(class1.name, class2.name)
+
+        Object key1 = IndyInterface.receiverCacheKey(class1)
+        Object key2 = IndyInterface.receiverCacheKey(class2)
+
+        assertNotSame(key1, key2, "Classes from different loaders must have distinct cache keys")
+    }
+
+    private static void updateMRU(CacheableCallSite callSite, Object key, Class targetClass, Class sender) {
+        // We use a dummy wrapper for testing
+        def wrapper = new MethodHandleWrapper(
+            java.lang.invoke.MethodHandles.constant(Object, "test"),
+            java.lang.invoke.MethodHandles.constant(Object, "test"),
+            new org.codehaus.groovy.reflection.CachedMethod(targetClass.getDeclaredMethods().length > 0 ? targetClass.getDeclaredMethods()[0] : Object.class.getMethod("toString")),
+            true
+        )
+        callSite.updateMRU(key, wrapper, sender)
+    }
+
+}
diff --git a/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyInterfaceCallSiteTargetTest.groovy b/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyInterfaceCallSiteTargetTest.groovy
index 9f9226dee2..b9a760cd63 100644
--- a/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyInterfaceCallSiteTargetTest.groovy
+++ b/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyInterfaceCallSiteTargetTest.groovy
@@ -25,8 +25,6 @@ import org.junit.jupiter.api.Test
 import java.lang.invoke.MethodHandle
 import java.lang.invoke.MethodHandles
 import java.lang.invoke.MethodType
-import java.lang.reflect.Field
-import java.lang.reflect.Method
 import java.lang.reflect.Modifier
 import java.util.concurrent.atomic.AtomicInteger
 
@@ -96,7 +94,7 @@ final class IndyInterfaceCallSiteTargetTest {
         CacheableCallSite callSite = newCallSite(type)
         Object[] args = [IndyInterfaceCallSiteTargetTest, ['bar'] as Object[]] as Object[]
 
-        MethodHandle methodHandle = invokeFromCacheHandle(
+        MethodHandle methodHandle = IndyInterface.fromCacheHandle(
             callSite,
             IndyInterfaceCallSiteTargetTest,
             'staticEcho',
@@ -124,16 +122,16 @@ final class IndyInterfaceCallSiteTargetTest {
         )
 
         cacheWrapper(callSite, receiver, wrapper)
-        primeLatestHitCount(callSite, receiver, wrapper, readIndyLong('INDY_OPTIMIZE_THRESHOLD'))
+        primeLatestHitCount(callSite, receiver, wrapper, IndyInterface.INDY_OPTIMIZE_THRESHOLD)
 
-        MethodHandle methodHandle = invokeFromCacheHandle(
+        MethodHandle methodHandle = IndyInterface.fromCacheHandle(
             callSite, IndyInterfaceCallSiteTargetTest, 'foo',
             IndyInterface.CallType.METHOD.getOrderNumber(),
             Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, 1, args
         )
 
         assertSame(wrapper.cachedMethodHandle, methodHandle)
-        assertSame(wrapper.targetMethodHandle, callSite.target)
+        assertNotSame(callSite.defaultTarget, callSite.target)
         assertEquals(0L, wrapper.latestHitCount)
     }
 
@@ -153,7 +151,7 @@ final class IndyInterfaceCallSiteTargetTest {
 
         cacheWrapper(callSite, receiver, wrapper)
 
-        MethodHandle methodHandle = invokeFromCacheHandle(
+        MethodHandle methodHandle = IndyInterface.fromCacheHandle(
             callSite, IndyInterfaceCallSiteTargetTest, 'foo',
             IndyInterface.CallType.METHOD.getOrderNumber(),
             Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, 1, args
@@ -169,7 +167,7 @@ final class IndyInterfaceCallSiteTargetTest {
         CacheableCallSite callSite = newCallSite(type)
         Object[] args = [null] as Object[]
 
-        MethodHandle methodHandle = invokeFromCacheHandle(
+        MethodHandle methodHandle = IndyInterface.fromCacheHandle(
             callSite, IndyInterfaceCallSiteTargetTest, 'foo',
             IndyInterface.CallType.METHOD.getOrderNumber(),
             Boolean.TRUE, Boolean.FALSE, Boolean.FALSE, 1, args
@@ -191,7 +189,7 @@ final class IndyInterfaceCallSiteTargetTest {
         registry.setMetaClass((Object) PerInstanceMetaClassStaticTarget, emc)
         try {
             2.times {
-                MethodHandle methodHandle = invokeFromCacheHandle(
+                MethodHandle methodHandle = IndyInterface.fromCacheHandle(
                     callSite, PerInstanceMetaClassStaticTarget, 'ping',
                     IndyInterface.CallType.METHOD.getOrderNumber(),
                     Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, 1, args
@@ -219,7 +217,7 @@ final class IndyInterfaceCallSiteTargetTest {
         cacheWrapper(callSite, receiver, wrapper)
         callSite.target = wrapper.targetMethodHandle
 
-        MethodHandle methodHandle = invokeFromCacheHandle(
+        MethodHandle methodHandle = IndyInterface.fromCacheHandle(
             callSite, IndyInterfaceCallSiteTargetTest, 'foo',
             IndyInterface.CallType.METHOD.getOrderNumber(),
             Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, 1, args
@@ -241,7 +239,7 @@ final class IndyInterfaceCallSiteTargetTest {
 
         cacheWrapper(callSite, ClassA, wrapper)
 
-        MethodHandle methodHandle = invokeFromCacheHandle(
+        MethodHandle methodHandle = IndyInterface.fromCacheHandle(
             callSite, ClassA, 'bar',
             IndyInterface.CallType.METHOD.getOrderNumber(),
             Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, 1, args
@@ -257,7 +255,7 @@ final class IndyInterfaceCallSiteTargetTest {
         CacheableCallSite callSite = newCallSite(type)
 
         Object[] argsA = [ClassA] as Object[]
-        MethodHandle handleA = invokeFromCacheHandle(
+        MethodHandle handleA = IndyInterface.fromCacheHandle(
             callSite, ClassA, 'bar',
             IndyInterface.CallType.METHOD.getOrderNumber(),
             Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, 1, argsA
@@ -265,7 +263,7 @@ final class IndyInterfaceCallSiteTargetTest {
         assertEquals(ClassA.bar(), handleA.invokeWithArguments([argsA] as Object[]))
 
         Object[] argsB = [ClassB] as Object[]
-        MethodHandle handleB = invokeFromCacheHandle(
+        MethodHandle handleB = IndyInterface.fromCacheHandle(
             callSite, ClassB, 'bar',
             IndyInterface.CallType.METHOD.getOrderNumber(),
             Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, 1, argsB
@@ -285,7 +283,7 @@ final class IndyInterfaceCallSiteTargetTest {
         cacheWrapper(callSite, ClassA, wrapper)
 
         Object[] args = [ClassA] as Object[]
-        MethodHandle methodHandle = invokeFromCacheHandle(
+        MethodHandle methodHandle = IndyInterface.fromCacheHandle(
             callSite, ClassA, 'bar',
             IndyInterface.CallType.METHOD.getOrderNumber(),
             Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, 1, args
@@ -304,7 +302,7 @@ final class IndyInterfaceCallSiteTargetTest {
         cacheWrapper(callSite, ClassA, wrapper)
 
         Object[] args = [ClassA] as Object[]
-        MethodHandle methodHandle = invokeFromCacheHandle(
+        MethodHandle methodHandle = IndyInterface.fromCacheHandle(
             callSite, ClassA, 'bar',
             IndyInterface.CallType.METHOD.getOrderNumber(),
             Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, 1, args
@@ -321,7 +319,7 @@ final class IndyInterfaceCallSiteTargetTest {
         def receiver = new InstanceStaticCallTarget()
         Object[] args = [receiver, 'abc'] as Object[]
 
-        MethodHandle selectedHandle = invokeSelectMethodHandle(
+        MethodHandle selectedHandle = IndyInterface.selectMethodHandle(
             callSite, InstanceStaticCallTarget, 'valueOf',
             IndyInterface.CallType.METHOD.getOrderNumber(),
             Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, 1, args
@@ -332,7 +330,7 @@ final class IndyInterfaceCallSiteTargetTest {
         assertTrue(Modifier.isStatic(cachedWrapper.method.modifiers))
         assertSame(callSite.defaultTarget, callSite.target)
 
-        MethodHandle cachedHandle = invokeFromCacheHandle(
+        MethodHandle cachedHandle = IndyInterface.fromCacheHandle(
             callSite, InstanceStaticCallTarget, 'valueOf',
             IndyInterface.CallType.METHOD.getOrderNumber(),
             Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, 1, args
@@ -349,7 +347,7 @@ final class IndyInterfaceCallSiteTargetTest {
         CacheableCallSite callSite = newCallSite(type)
 
         Object[] argsA = [ClassA] as Object[]
-        MethodHandle handleA = invokeSelectMethodHandle(
+        MethodHandle handleA = IndyInterface.selectMethodHandle(
             callSite, ClassA, 'bar',
             IndyInterface.CallType.METHOD.getOrderNumber(),
             Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, 1, argsA
@@ -357,7 +355,7 @@ final class IndyInterfaceCallSiteTargetTest {
         assertEquals(ClassA.bar(), handleA.invokeWithArguments([argsA] as Object[]))
 
         Object[] argsB = [ClassB] as Object[]
-        MethodHandle handleB = invokeSelectMethodHandle(
+        MethodHandle handleB = IndyInterface.selectMethodHandle(
             callSite, ClassB, 'bar',
             IndyInterface.CallType.METHOD.getOrderNumber(),
             Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, 1, argsB
@@ -378,7 +376,7 @@ final class IndyInterfaceCallSiteTargetTest {
         CacheableCallSite callSite = newCallSite(type)
         Object[] args = [IndyInterfaceCallSiteTargetTest, ['bar'] as Object[]] as Object[]
 
-        MethodHandle methodHandle = invokeSelectMethodHandle(
+        MethodHandle methodHandle = IndyInterface.selectMethodHandle(
             callSite, IndyInterfaceCallSiteTargetTest, 'staticEcho',
             IndyInterface.CallType.METHOD.getOrderNumber(),
             Boolean.FALSE, Boolean.FALSE, Boolean.TRUE, 1, args
@@ -416,7 +414,7 @@ final class IndyInterfaceCallSiteTargetTest {
 
     private static void primeLatestHitCount(CacheableCallSite callSite, Object receiver, MethodHandleWrapper wrapper, long value) {
         assertSame(wrapper, callSite.getAndPut(IndyInterface.receiverCacheKey(receiver), { wrapper }, IndyInterfaceCallSiteTargetTest))
-        latestHitCountField().get(wrapper).set(value)
+        wrapper.@latestHitCount.set(value)
     }
 
     private static void assertFallbackCutoffLeavesDefaultTarget(boolean startAwayFromDefaultTarget) {
@@ -430,13 +428,13 @@ final class IndyInterfaceCallSiteTargetTest {
         )
 
         cacheWrapper(callSite, receiver, wrapper)
-        primeLatestHitCount(callSite, receiver, wrapper, readIndyLong('INDY_OPTIMIZE_THRESHOLD'))
-        callSite.fallbackRound.set(readIndyLong('INDY_FALLBACK_CUTOFF') + 1L)
+        primeLatestHitCount(callSite, receiver, wrapper, IndyInterface.INDY_OPTIMIZE_THRESHOLD)
+        callSite.fallbackRound.set(IndyInterface.INDY_FALLBACK_CUTOFF + 1L)
         if (startAwayFromDefaultTarget) {
             callSite.target = targetHandle(type, 'non-default-target')
         }
 
-        MethodHandle methodHandle = invokeFromCacheHandle(
+        MethodHandle methodHandle = IndyInterface.fromCacheHandle(
             callSite, IndyInterfaceCallSiteTargetTest, 'foo',
             IndyInterface.CallType.METHOD.getOrderNumber(),
             Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, 1, args
@@ -463,37 +461,5 @@ final class IndyInterfaceCallSiteTargetTest {
         return receiver.getClass().name
     }
 
-    private static long readIndyLong(String fieldName) {
-        Field field = IndyInterface.getDeclaredField(fieldName)
-        field.accessible = true
-        field.getLong(null)
-    }
-
-    private static Field latestHitCountField() {
-        Field field = MethodHandleWrapper.getDeclaredField('latestHitCount')
-        field.accessible = true
-        field
-    }
-
-    private static MethodHandle invokeFromCacheHandle(CacheableCallSite callSite, Class<?> sender, String methodName,
-            int callID, Boolean safeNavigation, Boolean thisCall, Boolean spreadCall, Object dummyReceiver, Object[] arguments) {
-        Method method = IndyInterface.getDeclaredMethod('fromCacheHandle',
-            CacheableCallSite, Class, String, Integer.TYPE, Boolean, Boolean, Boolean, Object, Object[]
-        )
-        method.accessible = true
-        return (MethodHandle) method.invoke(null,
-            callSite, sender, methodName, callID, safeNavigation, thisCall, spreadCall, dummyReceiver, arguments
-        )
-    }
 
-    private static MethodHandle invokeSelectMethodHandle(CacheableCallSite callSite, Class<?> sender, String methodName,
-            int callID, Boolean safeNavigation, Boolean thisCall, Boolean spreadCall, Object dummyReceiver, Object[] arguments) {
-        Method method = IndyInterface.getDeclaredMethod('selectMethodHandle',
-            CacheableCallSite, Class, String, Integer.TYPE, Boolean, Boolean, Boolean, Object, Object[]
-        )
-        method.accessible = true
-        return (MethodHandle) method.invoke(null,
-            callSite, sender, methodName, callID, safeNavigation, thisCall, spreadCall, dummyReceiver, arguments
-        )
-    }
 }
diff --git a/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyInterfacePicTest.groovy b/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyInterfacePicTest.groovy
new file mode 100644
index 0000000000..1f6715259d
--- /dev/null
+++ b/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyInterfacePicTest.groovy
@@ -0,0 +1,72 @@
+package org.codehaus.groovy.vmplugin.v8
+
+import org.junit.jupiter.api.Test
+import java.lang.invoke.MethodType
+import static org.junit.jupiter.api.Assertions.*
+
+final class IndyInterfacePicTest {
+
+    static class Receiver1 { String foo() { "r1" } }
+    static class Receiver2 { String foo() { "r2" } }
+    static class Receiver3 { String foo() { "r3" } }
+    static class Receiver4 { String foo() { "r4" } }
+    static class Receiver5 { String foo() { "r5" } }
+
+    @Test
+    void testPicChainGrowthAndLimit() {
+        MethodType type = MethodType.methodType(Object, Object)
+        // Use bootstrap for proper initialization
+        CacheableCallSite callSite = (CacheableCallSite) IndyInterface.bootstrap(
+                java.lang.invoke.MethodHandles.lookup(), "invoke", type, "foo", 0)
+
+        // Initial state
+        assertEquals(0, callSite.getPicCount())
+        assertNull(callSite.getPicChain())
+
+        def receivers = [new Receiver1(), new Receiver2(), new Receiver3(), new Receiver4(), new Receiver5()]
+        int picLimit = IndyInterface.INDY_PIC_SIZE
+        int optimizeThreshold = (int) IndyInterface.INDY_OPTIMIZE_THRESHOLD
+
+        receivers.eachWithIndex { receiver, i ->
+            Object[] args = [receiver] as Object[]
+
+            // Trigger method selection and optimization
+            // We need to exceed INDY_OPTIMIZE_THRESHOLD
+            (optimizeThreshold + 10).times {
+                callSite.getTarget().invokeWithArguments(args)
+            }
+
+            if (i < picLimit) {
+                assertEquals(i + 1, callSite.getPicCount(), "PIC should grow for receiver ${i+1}")
+                assertNotNull(callSite.getPicChain())
+            } else {
+                assertEquals(picLimit, callSite.getPicCount(), "PIC should stop growing at limit")
+            }
+        }
+    }
+
+    @Test
+    void testPicResetOnMetaClassChange() {
+        MethodType type = MethodType.methodType(Object, Object)
+        CacheableCallSite callSite = (CacheableCallSite) IndyInterface.bootstrap(
+                java.lang.invoke.MethodHandles.lookup(), "invoke", type, "foo", 0)
+
+        def receiver = new Receiver1()
+        Object[] args = [receiver] as Object[]
+
+        int optimizeThreshold = (int) IndyInterface.INDY_OPTIMIZE_THRESHOLD
+
+        // Fill PIC
+        (optimizeThreshold + 10).times {
+            callSite.getTarget().invokeWithArguments(args)
+        }
+        assertTrue(callSite.getPicCount() > 0)
+
+        // Trigger global invalidation (reset)
+        callSite.resetFallbackCount()
+
+        assertEquals(0, callSite.getPicCount())
+        assertNull(callSite.getPicChain())
+    }
+
+}


(groovy) 06/06: GROOVY-12023: further fixes for multi threading and fixing some minor issues

Posted by bl...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

blackdrag pushed a commit to branch feature/Cache_changes
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit cb74b15efd1209417fe4300ab35abdb4822db18a
Author: Jochen Theodorou <bl...@gmx.org>
AuthorDate: Thu May 21 09:27:31 2026 +0200

    GROOVY-12023: further fixes for multi threading and fixing some minor issues
---
 .../groovy/vmplugin/v8/CacheableCallSite.java      | 135 ++++++++++++---------
 .../codehaus/groovy/vmplugin/v8/IndyInterface.java |  35 ++----
 .../groovy/vmplugin/v8/MethodHandleWrapper.java    |  23 ++--
 .../v8/IndyInterfaceCallSiteTargetTest.groovy      |   5 +-
 4 files changed, 111 insertions(+), 87 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/CacheableCallSite.java b/src/main/java/org/codehaus/groovy/vmplugin/v8/CacheableCallSite.java
index 57d726e34f..191ec1ca71 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/CacheableCallSite.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/CacheableCallSite.java
@@ -23,12 +23,12 @@ import java.lang.invoke.MethodHandle;
 import java.lang.invoke.MethodHandles;
 import java.lang.invoke.MethodType;
 import java.lang.invoke.MutableCallSite;
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
 import java.lang.ref.SoftReference;
 import java.util.Arrays;
 import java.util.LinkedHashMap;
 import java.util.Map;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.function.UnaryOperator;
 import java.util.logging.Level;
@@ -66,6 +66,7 @@ import org.codehaus.groovy.runtime.memoize.MemoizeCache;
  * @since 3.0.0
  */
 public class CacheableCallSite extends MutableCallSite {
+    private static final Logger LOGGER = Logger.getLogger(CacheableCallSite.class.getName());
     private static final int CACHE_SIZE = SystemUtil.getIntegerSafe("groovy.indy.callsite.cache.size", 8);
     private static final float LOAD_FACTOR = 0.75f;
     private static final int INITIAL_CAPACITY = (int) Math.ceil(CACHE_SIZE / LOAD_FACTOR) + 1;
@@ -87,6 +88,7 @@ public class CacheableCallSite extends MutableCallSite {
      * <b>Concurrency:</b> {@code volatile} ensures that updates to the PIC chain are immediately
      * visible to all threads during high-speed dispatch.
      */
+    @SuppressWarnings("java:S3077")
     private volatile MethodHandle picChain;
 
     /**
@@ -104,7 +106,7 @@ public class CacheableCallSite extends MutableCallSite {
      */
     private volatile int picCount;
     private final Map<Object, SoftReference<MethodHandleWrapper>> lruCache =
-            new LinkedHashMap<Object, SoftReference<MethodHandleWrapper>>(INITIAL_CAPACITY, LOAD_FACTOR, true) {
+            new LinkedHashMap<>(INITIAL_CAPACITY, LOAD_FACTOR, true) {
                 @Serial private static final long serialVersionUID = 7785958879964294463L;
 
                 /**
@@ -123,7 +125,7 @@ public class CacheableCallSite extends MutableCallSite {
      * Creates a cacheable call site for the supplied type and lookup context.
      *
      * @param type the call-site type
-     * @param lookup the lookup used to unreflect targets
+     * @param lookup the lookup used to un-reflect targets
      */
     public CacheableCallSite(MethodType type, MethodHandles.Lookup lookup) {
         super(type);
@@ -137,7 +139,7 @@ public class CacheableCallSite extends MutableCallSite {
      * @param key the receiver cache key
      * @return the cached wrapper, or {@code null} if not found or not MRU
      */
-    public MethodHandleWrapper get(Object key) {
+    MethodHandleWrapper get(Object key) {
         MRUEntry entry = mruEntry;
         if (entry != null && entry.key == key) {
             return entry.wrapper;
@@ -156,19 +158,21 @@ public class CacheableCallSite extends MutableCallSite {
      * @param sender the caller class
      * @return the cached or newly created wrapper
      */
-    public MethodHandleWrapper getAndPut(Object key, MemoizeCache.ValueProvider<? super Object, ? extends MethodHandleWrapper> valueProvider, Class<?> sender) {
+    MethodHandleWrapper getAndPut(Object key, MemoizeCache.ValueProvider<? super Object, ? extends MethodHandleWrapper> valueProvider, Class<?> sender) {
         MethodHandleWrapper result = null;
         SoftReference<MethodHandleWrapper> resultSoftReference;
         synchronized (lruCache) {
             resultSoftReference = lruCache.get(key);
             if (null != resultSoftReference) {
                 result = resultSoftReference.get();
-                if (null == result) removeAllStaleEntriesOfLruCache();
+                if (null == result) {
+                    lruCache.remove(key);
+                }
             }
 
             if (null == result) {
                 result = valueProvider.provide(key);
-                resultSoftReference = new SoftReference<>(result);
+                resultSoftReference = new SoftReferenceWithKey(key, result, REFERENCE_QUEUE, lruCache);
                 lruCache.put(key, resultSoftReference);
             }
         }
@@ -211,13 +215,15 @@ public class CacheableCallSite extends MutableCallSite {
      * @param mhw the wrapper to cache
      * @return the previously cached wrapper, or {@code null} if none existed
      */
-    public MethodHandleWrapper put(Object key, MethodHandleWrapper mhw) {
+    MethodHandleWrapper put(Object key, MethodHandleWrapper mhw) {
         synchronized (lruCache) {
-            final SoftReference<MethodHandleWrapper> methodHandleWrapperSoftReference;
-            methodHandleWrapperSoftReference = lruCache.put(key, new SoftReference<>(mhw));
+            final SoftReference<MethodHandleWrapper> methodHandleWrapperSoftReference =
+                lruCache.put(key, new SoftReferenceWithKey(key, mhw, REFERENCE_QUEUE, lruCache));
             if (null == methodHandleWrapperSoftReference) return null;
             final MethodHandleWrapper methodHandleWrapper = methodHandleWrapperSoftReference.get();
-            if (null == methodHandleWrapper) removeAllStaleEntriesOfLruCache();
+            if (null == methodHandleWrapper) {
+                lruCache.remove(key);
+            }
             return methodHandleWrapper;
         }
     }
@@ -248,55 +254,32 @@ public class CacheableCallSite extends MutableCallSite {
         }
     }
 
-    /**
-     * Resets the PIC and targets to the default state if not already reset.
-     * <p>
-     * <b>Concurrency:</b> Synchronizes on {@code this} to safely reset the
-     * target and PIC metadata when the site becomes too megamorphic.
-     */
-    public void resetPicAndTarget() {
-        synchronized (this) {
-            if (getTarget() != defaultTarget) {
-                setTarget(defaultTarget);
-                resetFallbackCount();
-            }
-        }
-    }
-
-    public synchronized void recordInPic(Object key) {
-        if (picCount < picKeys.length) {
-            picKeys[picCount++] = key;
-        }
-    }
-
     /**
      * Checks if a receiver shape is already present in the PIC.
      * <p>
-     * <b>Concurrency:</b> Marked as {@code synchronized} to prevent reading inconsistent state
-     * while the PIC is being updated.
+     * <b>Concurrency:</b> Lock-free read of the PIC metadata. The volatile read of {@link #picCount}
+     * ensures visibility of prior writes to {@link #picKeys} by the same or another thread.
      *
      * @param key the receiver cache key
      * @return {@code true} if the key is in the PIC
      */
-    public synchronized boolean picIncludes(Object key) {
-        for (int i = 0; i < picCount; i++) {
-            if (picKeys[i] == key) return true;
+    public boolean picInsertIfMissing(Object key) {
+        int count = picCount;
+        for (int i = 0; i < count; i++) {
+            if (picKeys[i] == key) return false;
         }
-        return false;
+        return true;
     }
 
     public MethodHandle getPicChain() {
         return picChain;
     }
 
-    public void setPicChain(MethodHandle picChain) {
-        this.picChain = picChain;
-    }
-
-    public synchronized int getPicCount() {
+    public int getPicCount() {
         return picCount;
     }
 
+    @javax.annotation.concurrent.Immutable
     private static final class MRUEntry {
         final Object key;
         final MethodHandleWrapper wrapper;
@@ -306,12 +289,50 @@ public class CacheableCallSite extends MutableCallSite {
         }
     }
 
-    private void removeAllStaleEntriesOfLruCache() {
-        CACHE_CLEANER_QUEUE.offer(() -> {
-            synchronized (lruCache) {
-                lruCache.values().removeIf(v -> null == v.get());
+    private static class SoftReferenceWithKey extends SoftReference<MethodHandleWrapper> {
+        private final Object key;
+        private final Map<Object, SoftReference<MethodHandleWrapper>> cache;
+
+        SoftReferenceWithKey(Object key, MethodHandleWrapper referent, ReferenceQueue<MethodHandleWrapper> q, Map<Object, SoftReference<MethodHandleWrapper>> cache) {
+            super(referent, q);
+            this.key = key;
+            this.cache = cache;
+        }
+
+        void clean() {
+            synchronized (cache) {
+                if (cache.get(key) == this) {
+                    cache.remove(key);
+                }
+            }
+        }
+    }
+
+    /**
+     * Atomically resets the call site to the default target when the fallback count
+     * exceeds the given threshold. This provides a concurrency-safe, double-checked
+     * locking reset for mega-morphic call sites.
+     * <p>
+     * <b>Concurrency:</b> Synchronizes on {@code this} to atomically reset
+     * the target and associated PIC metadata, preventing redundant resets
+     * when multiple threads detect a high fallback count simultaneously.
+     *
+     * @param defaultTarget     the default target handle to restore
+     * @param threshold         the fallback count threshold that triggers a reset
+     * @param fallbackCount     the current fallback count
+     * @return {@code true} if the target was reset to the default
+     */
+    public boolean tryResetToDefaultTarget(MethodHandle defaultTarget, long threshold, long fallbackCount) {
+        if (fallbackCount > threshold && getTarget() != defaultTarget) {
+            synchronized (this) {
+                if (getTarget() != defaultTarget) {
+                    setTarget(defaultTarget);
+                    resetFallbackCount();
+                    return true;
+                }
             }
-        });
+        }
+        return false;
     }
 
     /**
@@ -391,16 +412,22 @@ public class CacheableCallSite extends MutableCallSite {
         return lookup;
     }
 
-    private static final BlockingQueue<Runnable> CACHE_CLEANER_QUEUE = new LinkedBlockingQueue<>();
+    private static final ReferenceQueue<MethodHandleWrapper> REFERENCE_QUEUE = new ReferenceQueue<>();
     static {
         Thread cacheCleaner = new Thread(() -> {
             while (true) {
                 try {
-                    CACHE_CLEANER_QUEUE.take().run();
-                } catch (Throwable ignore) {
+                    Reference<? extends MethodHandleWrapper> ref = REFERENCE_QUEUE.remove();
+                    if (ref instanceof SoftReferenceWithKey sRef) {
+                        sRef.clean();
+                    }
+                } catch (@SuppressWarnings("java:S1181") Throwable throwable) {
+                    if (throwable instanceof InterruptedException) {
+                        Thread.currentThread().interrupt();
+                    }
                     Logger logger = Logger.getLogger(MethodHandles.lookup().lookupClass().getName());
-                    if (logger.isLoggable(Level.FINEST)) {
-                        logger.finest(DefaultGroovyMethods.asString(ignore));
+                    if (LOGGER.isLoggable(Level.FINEST)) {
+                        logger.finest(DefaultGroovyMethods.asString(throwable));
                     }
                 }
             }
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java b/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java
index 982b088e80..bb7f182383 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java
@@ -18,6 +18,7 @@
  */
 package org.codehaus.groovy.vmplugin.v8;
 
+import edu.umd.cs.findbugs.annotations.NonNull;
 import groovy.lang.GroovySystem;
 import org.apache.groovy.util.SystemUtil;
 import org.codehaus.groovy.GroovyBugError;
@@ -205,6 +206,7 @@ public class IndyInterface {
      * <b>Concurrency:</b> {@code volatile} ensures that global invalidations are immediately
      * visible to all threads across the JVM, causing them to fall back from JIT-optimized handles.
      */
+    @SuppressWarnings("java:S3077")
     protected static volatile SwitchPoint switchPoint = new SwitchPoint();
 
     static {
@@ -371,9 +373,9 @@ public class IndyInterface {
     }
 
     private static final Object NULL_KEY = new Object();
-    private static final ClassValue<Object> STATIC_KEYS = new ClassValue<Object>() {
+    private static final ClassValue<Object> STATIC_KEYS = new ClassValue<>() {
         @Override
-        protected Object computeValue(Class<?> type) {
+        protected Object computeValue(@NonNull Class<?> type) {
             return new Object();
         }
     };
@@ -388,16 +390,14 @@ public class IndyInterface {
         MethodHandleWrapper mhw = callSite.get(receiverKey);
         if (mhw != null) {
             mhw.incrementLatestHitCount();
-            if (mhw.isCanSetTarget() && (callSite.getTarget() != mhw.getTargetMethodHandle())) {
-                if (mhw.getLatestHitCount() > INDY_OPTIMIZE_THRESHOLD) {
-                    optimizeCallSite(callSite, sender, methodName, callID, safeNavigation, thisCall, spreadCall, arguments, mhw);
-                }
+            if (mhw.isCanSetTarget() && (callSite.getTarget() != mhw.getTargetMethodHandle()) && mhw.getLatestHitCount() > INDY_OPTIMIZE_THRESHOLD && callSite.picInsertIfMissing(receiverKey)) {
+                optimizeCallSite(callSite, sender, methodName, callID, safeNavigation, thisCall, spreadCall, arguments, receiverKey, mhw);
             }
             return mhw.getCachedMethodHandle();
         }
 
         FallbackSupplier fallbackSupplier = new FallbackSupplier(callSite, sender, methodName, callID, safeNavigation, thisCall, spreadCall, dummyReceiver, arguments);
-        mhw = callSite.getAndPut(receiverKey, (theKey) -> {
+        mhw = callSite.getAndPut(receiverKey, theKey -> {
             MethodHandleWrapper fallback = fallbackSupplier.get();
             if (fallback.isCanSetTarget()) return fallback;
             return NULL_METHOD_HANDLE_WRAPPER;
@@ -418,21 +418,20 @@ public class IndyInterface {
                 }
             }
 
-            if (mhw.getLatestHitCount() > INDY_OPTIMIZE_THRESHOLD) {
-                optimizeCallSite(callSite, sender, methodName, callID, safeNavigation, thisCall, spreadCall, arguments, mhw);
+            if (mhw.getLatestHitCount() > INDY_OPTIMIZE_THRESHOLD && callSite.picInsertIfMissing(receiverKey)) {
+                optimizeCallSite(callSite, sender, methodName, callID, safeNavigation, thisCall, spreadCall, arguments, receiverKey, mhw);
             }
         }
 
         return mhw.getCachedMethodHandle();
     }
 
-    private static void optimizeCallSite(CacheableCallSite callSite, Class<?> sender, String methodName, int callID, boolean safeNavigation, boolean thisCall, boolean spreadCall, Object[] arguments, MethodHandleWrapper mhw) {
+    private static void optimizeCallSite(CacheableCallSite callSite, Class<?> sender, String methodName, int callID, boolean safeNavigation, boolean thisCall, boolean spreadCall, Object[] arguments, Object receiverKey, MethodHandleWrapper mhw) {
         if (callSite.getFallbackRound().get() > INDY_FALLBACK_CUTOFF) {
             if (callSite.getTarget() != callSite.getDefaultTarget()) {
                 callSite.setTarget(callSite.getDefaultTarget());
             }
         } else {
-            Object receiverKey = receiverCacheKey(arguments[0]);
             callSite.maybeUpdatePic(receiverKey, picChain -> {
                 Selector selector = Selector.getSelector(callSite, sender, methodName, callID, safeNavigation, thisCall, spreadCall, arguments);
                 selector.skipSwitchPoint = true;
@@ -466,18 +465,8 @@ public class IndyInterface {
 
         MethodHandle defaultTarget = callSite.getDefaultTarget();
         long fallbackCount = callSite.incrementFallbackCount();
-        if ((fallbackCount > INDY_FALLBACK_THRESHOLD) && (callSite.getTarget() != defaultTarget)) {
-            /**
-             * <b>Concurrency:</b> Synchronizes on the {@code callSite} to safely reset the
-             * target and PIC metadata when the site becomes too megamorphic.
-             */
-            synchronized (callSite) {
-                if (callSite.getTarget() != defaultTarget) {
-                    callSite.setTarget(defaultTarget);
-                    if (LOG_ENABLED) LOG.info("call site target reset to default, preparing outside invocation");
-                    callSite.resetFallbackCount();
-                }
-            }
+        if (callSite.tryResetToDefaultTarget(defaultTarget, INDY_FALLBACK_THRESHOLD, fallbackCount)) {
+            if (LOG_ENABLED) LOG.info("call site target reset to default, preparing outside invocation");
         }
 
         if (callSite.getTarget() == defaultTarget) {
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/MethodHandleWrapper.java b/src/main/java/org/codehaus/groovy/vmplugin/v8/MethodHandleWrapper.java
index 71c3cb5dbb..34b59ac061 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/MethodHandleWrapper.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/MethodHandleWrapper.java
@@ -21,7 +21,7 @@ package org.codehaus.groovy.vmplugin.v8;
 import groovy.lang.MetaMethod;
 
 import java.lang.invoke.MethodHandle;
-import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.atomic.LongAdder;
 
 /**
  * Wrap method handles
@@ -33,7 +33,7 @@ class MethodHandleWrapper {
     private final MethodHandle targetMethodHandle;
     private final MetaMethod method;
     private final boolean canSetTarget;
-    private final AtomicLong latestHitCount = new AtomicLong(0);
+    private final LongAdder latestHitCount = new LongAdder();
 
     /**
      * Creates a wrapper for the cached and relink targets of a meta method.
@@ -88,18 +88,25 @@ class MethodHandleWrapper {
 
     /**
      * Increments the hit count for the latest inline-cache hit.
-     *
-     * @return the updated hit count
      */
-    public long incrementLatestHitCount() {
-        return latestHitCount.incrementAndGet();
+    public void incrementLatestHitCount() {
+        latestHitCount.increment();
     }
 
     /**
      * Resets the latest-hit counter.
      */
     public void resetLatestHitCount() {
-        latestHitCount.set(0);
+        latestHitCount.reset();
+    }
+
+    /**
+     * Adds the specified value to the latest-hit counter.
+     *
+     * @param value the value to add
+     */
+    public void addLatestHitCount(long value) {
+        latestHitCount.add(value);
     }
 
     /**
@@ -108,7 +115,7 @@ class MethodHandleWrapper {
      * @return the current latest-hit counter
      */
     public long getLatestHitCount() {
-        return latestHitCount.get();
+        return latestHitCount.sum();
     }
 
     /**
diff --git a/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyInterfaceCallSiteTargetTest.groovy b/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyInterfaceCallSiteTargetTest.groovy
index 3655958308..b2f5f80e4b 100644
--- a/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyInterfaceCallSiteTargetTest.groovy
+++ b/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyInterfaceCallSiteTargetTest.groovy
@@ -424,7 +424,8 @@ final class IndyInterfaceCallSiteTargetTest {
 
     private static void primeLatestHitCount(CacheableCallSite callSite, Object receiver, MethodHandleWrapper wrapper, long value) {
         assertSame(wrapper, callSite.getAndPut(IndyInterface.receiverCacheKey(receiver), { wrapper }, IndyInterfaceCallSiteTargetTest))
-        wrapper.@latestHitCount.set(value)
+        wrapper.resetLatestHitCount()
+        wrapper.addLatestHitCount(value)
     }
 
     private static void assertFallbackCutoffLeavesDefaultTarget(boolean startAwayFromDefaultTarget) {
@@ -452,7 +453,7 @@ final class IndyInterfaceCallSiteTargetTest {
 
         assertSame(wrapper.cachedMethodHandle, methodHandle)
         assertSame(callSite.defaultTarget, callSite.target)
-        assertEquals(0L, wrapper.latestHitCount)
+        assertEquals(0L, wrapper.getLatestHitCount())
     }
 
     private static MethodHandleWrapper requireCachedWrapper(CacheableCallSite callSite, Object receiver) {


(groovy) 01/06: adding a lock free MRU field to CacheableCallSite to avoid SoftReference overhead. Since the target holds a hard reference as well, this should not introduce any extra memory pressure

Posted by bl...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

blackdrag pushed a commit to branch feature/Cache_changes
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 254c08cacfd4fe0ddfffc55416268e34614cc764
Author: Jochen Theodorou <bl...@gmx.org>
AuthorDate: Wed May 20 02:10:02 2026 +0200

    adding a lock free MRU field to CacheableCallSite to avoid SoftReference overhead. Since the target holds a hard reference as well, this should not introduce any extra memory pressure
---
 .../groovy/vmplugin/v8/CacheableCallSite.java      | 82 ++++++++++++++++------
 .../codehaus/groovy/vmplugin/v8/IndyInterface.java | 68 +++++++++++-------
 .../v8/IndyInterfaceCallSiteTargetTest.groovy      |  8 +--
 3 files changed, 108 insertions(+), 50 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/CacheableCallSite.java b/src/main/java/org/codehaus/groovy/vmplugin/v8/CacheableCallSite.java
index b6a9a4622c..ff57d8b979 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/CacheableCallSite.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/CacheableCallSite.java
@@ -46,13 +46,13 @@ public class CacheableCallSite extends MutableCallSite {
     private static final float LOAD_FACTOR = 0.75f;
     private static final int INITIAL_CAPACITY = (int) Math.ceil(CACHE_SIZE / LOAD_FACTOR) + 1;
     private final MethodHandles.Lookup lookup;
-    private volatile SoftReference<MethodHandleWrapper> latestHitMethodHandleWrapperSoftReference = null;
+    private volatile MRUEntry mruEntry;
     private final AtomicLong fallbackCount = new AtomicLong();
     private final AtomicLong fallbackRound = new AtomicLong();
     private MethodHandle defaultTarget;
     private MethodHandle fallbackTarget;
-    private final Map<String, SoftReference<MethodHandleWrapper>> lruCache =
-            new LinkedHashMap<String, SoftReference<MethodHandleWrapper>>(INITIAL_CAPACITY, LOAD_FACTOR, true) {
+    private final Map<Object, SoftReference<MethodHandleWrapper>> lruCache =
+            new LinkedHashMap<Object, SoftReference<MethodHandleWrapper>>(INITIAL_CAPACITY, LOAD_FACTOR, true) {
                 @Serial private static final long serialVersionUID = 7785958879964294463L;
 
                 /**
@@ -78,54 +78,85 @@ public class CacheableCallSite extends MutableCallSite {
         this.lookup = lookup;
     }
 
+    /**
+     * Returns the cached method-handle wrapper for the receiver key if it is the most recently used.
+     *
+     * @param key the receiver cache key
+     * @return the cached wrapper, or {@code null} if not found or not MRU
+     */
+    public MethodHandleWrapper get(Object key) {
+        MRUEntry entry = mruEntry;
+        if (entry != null && entry.key == key) {
+            return entry.wrapper;
+        }
+        return null;
+    }
+
     /**
      * Returns a cached method-handle wrapper for the receiver class, computing and storing it if needed.
      *
-     * @param className the receiver cache key
+     * @param key the receiver cache key
      * @param valueProvider the provider used to compute a missing entry
+     * @param sender the caller class
      * @return the cached or newly created wrapper
      */
-    public MethodHandleWrapper getAndPut(String className, MemoizeCache.ValueProvider<? super String, ? extends MethodHandleWrapper> valueProvider) {
+    public MethodHandleWrapper getAndPut(Object key, MemoizeCache.ValueProvider<? super Object, ? extends MethodHandleWrapper> valueProvider, Class<?> sender) {
         MethodHandleWrapper result = null;
         SoftReference<MethodHandleWrapper> resultSoftReference;
         synchronized (lruCache) {
-            resultSoftReference = lruCache.get(className);
+            resultSoftReference = lruCache.get(key);
             if (null != resultSoftReference) {
                 result = resultSoftReference.get();
                 if (null == result) removeAllStaleEntriesOfLruCache();
             }
 
             if (null == result) {
-                result = valueProvider.provide(className);
+                result = valueProvider.provide(key);
                 resultSoftReference = new SoftReference<>(result);
-                lruCache.put(className, resultSoftReference);
+                lruCache.put(key, resultSoftReference);
             }
         }
-        final SoftReference<MethodHandleWrapper> mhwsr = latestHitMethodHandleWrapperSoftReference;
-        final MethodHandleWrapper methodHandleWrapper = null == mhwsr ? null : mhwsr.get();
-
-        if (methodHandleWrapper == result) {
-            result.incrementLatestHitCount();
-        } else {
-            result.resetLatestHitCount();
-            if (null != methodHandleWrapper) methodHandleWrapper.resetLatestHitCount();
-            latestHitMethodHandleWrapperSoftReference = resultSoftReference;
-        }
+
+        updateMRU(key, result, sender);
 
         return result;
     }
 
+    private void updateMRU(Object key, MethodHandleWrapper result, Class<?> sender) {
+        if (result == null || result == MethodHandleWrapper.getNullMethodHandleWrapper()) return;
+
+        // Leak-Awareness: only store strongly if the target loader is safe
+        var method = result.getMethod();
+        if (method != null) {
+            Class<?> declaringClass = method.getDeclaringClass().getTheClass();
+            if (isSafeLoader(sender.getClassLoader(), declaringClass.getClassLoader())) {
+                mruEntry = new MRUEntry(key, result);
+            }
+        }
+    }
+
+    private static boolean isSafeLoader(ClassLoader callerLoader, ClassLoader targetLoader) {
+        if (targetLoader == null) return true; // Bootstrap is always safe
+        if (callerLoader == targetLoader) return true;
+        ClassLoader cl = callerLoader;
+        while (cl != null) {
+            if (cl == targetLoader) return true;
+            cl = cl.getParent();
+        }
+        return false;
+    }
+
     /**
      * Stores a method-handle wrapper under the supplied cache key.
      *
-     * @param name the receiver cache key
+     * @param key the receiver cache key
      * @param mhw the wrapper to cache
      * @return the previously cached wrapper, or {@code null} if none existed
      */
-    public MethodHandleWrapper put(String name, MethodHandleWrapper mhw) {
+    public MethodHandleWrapper put(Object key, MethodHandleWrapper mhw) {
         synchronized (lruCache) {
             final SoftReference<MethodHandleWrapper> methodHandleWrapperSoftReference;
-            methodHandleWrapperSoftReference = lruCache.put(name, new SoftReference<>(mhw));
+            methodHandleWrapperSoftReference = lruCache.put(key, new SoftReference<>(mhw));
             if (null == methodHandleWrapperSoftReference) return null;
             final MethodHandleWrapper methodHandleWrapper = methodHandleWrapperSoftReference.get();
             if (null == methodHandleWrapper) removeAllStaleEntriesOfLruCache();
@@ -133,6 +164,15 @@ public class CacheableCallSite extends MutableCallSite {
         }
     }
 
+    private static final class MRUEntry {
+        final Object key;
+        final MethodHandleWrapper wrapper;
+        MRUEntry(Object key, MethodHandleWrapper wrapper) {
+            this.key = key;
+            this.wrapper = wrapper;
+        }
+    }
+
     private void removeAllStaleEntriesOfLruCache() {
         CACHE_CLEANER_QUEUE.offer(() -> {
             synchronized (lruCache) {
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java b/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java
index c088992337..91ef98d680 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java
@@ -56,7 +56,6 @@ public class IndyInterface {
     public static final int SAFE_NAVIGATION=1, THIS_CALL=2, GROOVY_OBJECT=4, IMPLICIT_THIS=8, SPREAD_CALL=16, UNCACHED_CALL=32;
 
     private static final MethodHandleWrapper NULL_METHOD_HANDLE_WRAPPER = MethodHandleWrapper.getNullMethodHandleWrapper();
-    private static final String NULL_OBJECT_CLASS_NAME = "org.codehaus.groovy.runtime.NullObject";
 
     /**
      * Enum for easy differentiation between call types.
@@ -352,18 +351,38 @@ public class IndyInterface {
         return mh.invokeExact(arguments);
     }
 
+    private static final Object NULL_KEY = new Object();
+    private static final ClassValue<Object> STATIC_KEYS = new ClassValue<Object>() {
+        @Override
+        protected Object computeValue(Class<?> type) {
+            return new Object();
+        }
+    };
+
     /**
      * Get the cached methodHandle. if the related methodHandle is not found in the inline cache, cache and return it.
      */
     private static MethodHandle fromCacheHandle(CacheableCallSite callSite, Class<?> sender, String methodName, int callID, Boolean safeNavigation, Boolean thisCall, Boolean spreadCall, Object dummyReceiver, Object[] arguments) throws Throwable {
-        FallbackSupplier fallbackSupplier = new FallbackSupplier(callSite, sender, methodName, callID, safeNavigation, thisCall, spreadCall, dummyReceiver, arguments);
         Object receiver = arguments[0];
-        String receiverClassName = receiverCacheKey(receiver);
-        MethodHandleWrapper mhw = callSite.getAndPut(receiverClassName, (theName) -> {
+        Object receiverKey = receiverCacheKey(receiver);
+
+        MethodHandleWrapper mhw = callSite.get(receiverKey);
+        if (mhw != null) {
+            mhw.incrementLatestHitCount();
+            if (mhw.isCanSetTarget() && (callSite.getTarget() != mhw.getTargetMethodHandle())) {
+                if (mhw.getLatestHitCount() > INDY_OPTIMIZE_THRESHOLD) {
+                    optimizeCallSite(callSite, mhw);
+                }
+            }
+            return mhw.getCachedMethodHandle();
+        }
+
+        FallbackSupplier fallbackSupplier = new FallbackSupplier(callSite, sender, methodName, callID, safeNavigation, thisCall, spreadCall, dummyReceiver, arguments);
+        mhw = callSite.getAndPut(receiverKey, (theKey) -> {
             MethodHandleWrapper fallback = fallbackSupplier.get();
             if (fallback.isCanSetTarget()) return fallback;
             return NULL_METHOD_HANDLE_WRAPPER;
-        });
+        }, sender);
 
         if (mhw == NULL_METHOD_HANDLE_WRAPPER) {
             // The PIC stores a sentinel to remember "do not relink this receiver shape";
@@ -381,25 +400,27 @@ public class IndyInterface {
             }
 
             if (mhw.getLatestHitCount() > INDY_OPTIMIZE_THRESHOLD) {
-                if (callSite.getFallbackRound().get() > INDY_FALLBACK_CUTOFF) {
-                    if (callSite.getTarget() != callSite.getDefaultTarget()) {
-                        // reset the call site target to default forever to avoid JIT deoptimization storm further
-                        callSite.setTarget(callSite.getDefaultTarget());
-                    }
-                } else {
-                    if (callSite.getTarget() != mhw.getTargetMethodHandle()) {
-                        callSite.setTarget(mhw.getTargetMethodHandle());
-                        if (LOG_ENABLED) LOG.info("call site target set, preparing outside invocation");
-                    }
-                }
-
-                mhw.resetLatestHitCount();
+                optimizeCallSite(callSite, mhw);
             }
         }
 
         return mhw.getCachedMethodHandle();
     }
 
+    private static void optimizeCallSite(CacheableCallSite callSite, MethodHandleWrapper mhw) {
+        if (callSite.getFallbackRound().get() > INDY_FALLBACK_CUTOFF) {
+            if (callSite.getTarget() != callSite.getDefaultTarget()) {
+                callSite.setTarget(callSite.getDefaultTarget());
+            }
+        } else {
+            if (callSite.getTarget() != mhw.getTargetMethodHandle()) {
+                callSite.setTarget(mhw.getTargetMethodHandle());
+                if (LOG_ENABLED) LOG.info("call site target set, preparing outside invocation");
+            }
+        }
+        mhw.resetLatestHitCount();
+    }
+
     /**
      * Core method for indy method selection using runtime types.
      * @deprecated Use the new bootHandle-based approach instead.
@@ -438,14 +459,11 @@ public class IndyInterface {
 
     /**
      * Computes the PIC cache key for the given receiver.
-     * Different {@code Class} objects (e.g. {@code A} vs {@code B}) share the same runtime class
-     * ({@code java.lang.Class}) but dispatch to different methods. Including the represented class
-     * name avoids PIC cache collisions for static-method call sites.
      */
-    private static String receiverCacheKey(Object receiver) {
-        if (receiver == null) return NULL_OBJECT_CLASS_NAME;
-        if (receiver instanceof Class<?> c) return "java.lang.Class:" + c.getName();
-        return receiver.getClass().getName();
+    static Object receiverCacheKey(Object receiver) {
+        if (receiver == null) return NULL_KEY;
+        if (receiver instanceof Class<?> c) return STATIC_KEYS.get(c);
+        return receiver.getClass();
     }
 
     private static MethodHandleWrapper fallback(CacheableCallSite callSite, Class<?> sender, String methodName, int callID, Boolean safeNavigation, Boolean thisCall, Boolean spreadCall, Object dummyReceiver, Object[] arguments) {
diff --git a/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyInterfaceCallSiteTargetTest.groovy b/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyInterfaceCallSiteTargetTest.groovy
index 2a499a222a..9f9226dee2 100644
--- a/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyInterfaceCallSiteTargetTest.groovy
+++ b/src/test/groovy/org/codehaus/groovy/vmplugin/v8/IndyInterfaceCallSiteTargetTest.groovy
@@ -411,11 +411,11 @@ final class IndyInterfaceCallSiteTargetTest {
     }
 
     private static void cacheWrapper(CacheableCallSite callSite, Object receiver, MethodHandleWrapper wrapper) {
-        callSite.put(receiverClassName(receiver), wrapper)
+        callSite.put(IndyInterface.receiverCacheKey(receiver), wrapper)
     }
 
     private static void primeLatestHitCount(CacheableCallSite callSite, Object receiver, MethodHandleWrapper wrapper, long value) {
-        assertSame(wrapper, callSite.getAndPut(receiverClassName(receiver), { wrapper }))
+        assertSame(wrapper, callSite.getAndPut(IndyInterface.receiverCacheKey(receiver), { wrapper }, IndyInterfaceCallSiteTargetTest))
         latestHitCountField().get(wrapper).set(value)
     }
 
@@ -449,10 +449,10 @@ final class IndyInterfaceCallSiteTargetTest {
 
     private static MethodHandleWrapper requireCachedWrapper(CacheableCallSite callSite, Object receiver) {
         AtomicInteger providerCalls = new AtomicInteger()
-        MethodHandleWrapper wrapper = callSite.getAndPut(receiverClassName(receiver), { key ->
+        MethodHandleWrapper wrapper = callSite.getAndPut(IndyInterface.receiverCacheKey(receiver), { key ->
             providerCalls.incrementAndGet()
             MethodHandleWrapper.getNullMethodHandleWrapper()
-        })
+        }, IndyInterfaceCallSiteTargetTest)
         assertEquals(0, providerCalls.get())
         wrapper
     }


(groovy) 02/06: GROOVY-12023: add a PIC with configurable size for indy in fron of the existing cache

Posted by bl...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

blackdrag pushed a commit to branch feature/Cache_changes
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 1acf9b981592cced38ea4941bc760ff712034a1c
Author: Jochen Theodorou <bl...@gmx.org>
AuthorDate: Wed May 20 10:18:08 2026 +0200

    GROOVY-12023: add a PIC with configurable size for indy in fron of the existing cache
---
 .../groovy/vmplugin/v8/CacheableCallSite.java      | 34 +++++++++++++++++-
 .../codehaus/groovy/vmplugin/v8/IndyInterface.java | 28 +++++++++++----
 .../org/codehaus/groovy/vmplugin/v8/Selector.java  | 40 ++++++++++++++--------
 3 files changed, 81 insertions(+), 21 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/CacheableCallSite.java b/src/main/java/org/codehaus/groovy/vmplugin/v8/CacheableCallSite.java
index ff57d8b979..87ba5573f1 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/CacheableCallSite.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/CacheableCallSite.java
@@ -51,6 +51,9 @@ public class CacheableCallSite extends MutableCallSite {
     private final AtomicLong fallbackRound = new AtomicLong();
     private MethodHandle defaultTarget;
     private MethodHandle fallbackTarget;
+    private volatile MethodHandle picChain;
+    private Object[] picKeys;
+    private int picCount;
     private final Map<Object, SoftReference<MethodHandleWrapper>> lruCache =
             new LinkedHashMap<Object, SoftReference<MethodHandleWrapper>>(INITIAL_CAPACITY, LOAD_FACTOR, true) {
                 @Serial private static final long serialVersionUID = 7785958879964294463L;
@@ -164,6 +167,33 @@ public class CacheableCallSite extends MutableCallSite {
         }
     }
 
+    public void recordInPic(Object key, int maxPicSize) {
+        if (picKeys == null) picKeys = new Object[maxPicSize];
+        if (picCount < picKeys.length) {
+            picKeys[picCount++] = key;
+        }
+    }
+
+    public boolean picIncludes(Object key) {
+        if (picKeys == null) return false;
+        for (int i = 0; i < picCount; i++) {
+            if (picKeys[i] == key) return true;
+        }
+        return false;
+    }
+
+    public MethodHandle getPicChain() {
+        return picChain;
+    }
+
+    public void setPicChain(MethodHandle picChain) {
+        this.picChain = picChain;
+    }
+
+    public int getPicCount() {
+        return picCount;
+    }
+
     private static final class MRUEntry {
         final Object key;
         final MethodHandleWrapper wrapper;
@@ -195,7 +225,9 @@ public class CacheableCallSite extends MutableCallSite {
      */
     public void resetFallbackCount() {
         fallbackCount.set(0);
-        fallbackRound.incrementAndGet();
+        picCount = 0;
+        picChain = null;
+        picKeys = null;
     }
 
     /**
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java b/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java
index 91ef98d680..6943533faa 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java
@@ -49,6 +49,7 @@ public class IndyInterface {
     private static final long INDY_OPTIMIZE_THRESHOLD = SystemUtil.getLongSafe("groovy.indy.optimize.threshold", 1_000L);
     private static final long INDY_FALLBACK_THRESHOLD = SystemUtil.getLongSafe("groovy.indy.fallback.threshold", 1_000L);
     private static final long INDY_FALLBACK_CUTOFF = SystemUtil.getLongSafe("groovy.indy.fallback.cutoff", 100L);
+    private static final int INDY_PIC_SIZE = SystemUtil.getIntegerSafe("groovy.indy.pic.size", 4);
 
     /**
      * Flags for method and property calls.
@@ -371,7 +372,7 @@ public class IndyInterface {
             mhw.incrementLatestHitCount();
             if (mhw.isCanSetTarget() && (callSite.getTarget() != mhw.getTargetMethodHandle())) {
                 if (mhw.getLatestHitCount() > INDY_OPTIMIZE_THRESHOLD) {
-                    optimizeCallSite(callSite, mhw);
+                    optimizeCallSite(callSite, sender, methodName, callID, safeNavigation, thisCall, spreadCall, arguments, mhw);
                 }
             }
             return mhw.getCachedMethodHandle();
@@ -400,22 +401,37 @@ public class IndyInterface {
             }
 
             if (mhw.getLatestHitCount() > INDY_OPTIMIZE_THRESHOLD) {
-                optimizeCallSite(callSite, mhw);
+                optimizeCallSite(callSite, sender, methodName, callID, safeNavigation, thisCall, spreadCall, arguments, mhw);
             }
         }
 
         return mhw.getCachedMethodHandle();
     }
 
-    private static void optimizeCallSite(CacheableCallSite callSite, MethodHandleWrapper mhw) {
+    private static void optimizeCallSite(CacheableCallSite callSite, Class<?> sender, String methodName, int callID, boolean safeNavigation, boolean thisCall, boolean spreadCall, Object[] arguments, MethodHandleWrapper mhw) {
         if (callSite.getFallbackRound().get() > INDY_FALLBACK_CUTOFF) {
             if (callSite.getTarget() != callSite.getDefaultTarget()) {
                 callSite.setTarget(callSite.getDefaultTarget());
             }
         } else {
-            if (callSite.getTarget() != mhw.getTargetMethodHandle()) {
-                callSite.setTarget(mhw.getTargetMethodHandle());
-                if (LOG_ENABLED) LOG.info("call site target set, preparing outside invocation");
+            Object receiverKey = receiverCacheKey(arguments[0]);
+            if (!callSite.picIncludes(receiverKey) && callSite.getPicCount() < INDY_PIC_SIZE) {
+                Selector selector = Selector.getSelector(callSite, sender, methodName, callID, safeNavigation, thisCall, spreadCall, arguments);
+                selector.skipSwitchPoint = true;
+                MethodHandle picChain = callSite.getPicChain();
+                if (picChain == null) picChain = callSite.getDefaultTarget();
+                selector.fallback = picChain;
+                selector.setCallSiteTarget();
+
+                MethodHandle newChain = selector.handle;
+                callSite.setPicChain(newChain);
+
+                // wrap with top-level SwitchPoint guard
+                MethodHandle target = switchPoint.guardWithTest(newChain, callSite.getDefaultTarget());
+                callSite.setTarget(target);
+                callSite.recordInPic(receiverKey, INDY_PIC_SIZE);
+
+                if (LOG_ENABLED) LOG.info("call site target updated with PIC link, pic size: " + callSite.getPicCount());
             }
         }
         mhw.resetLatestHitCount();
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java b/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java
index 12ce177122..44b9ee61c4 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java
@@ -161,11 +161,30 @@ public abstract class Selector {
      * Controls whether Groovy runtime exceptions are unwrapped around the target.
      */
     public boolean catchException = true;
+    /**
+     * Indicates whether the global SwitchPoint should be skipped for this selector.
+     */
+    public boolean skipSwitchPoint = false;
+    /**
+     * Custom fallback method handle to use during re-linking or PIC building.
+     */
+    public MethodHandle fallback;
     /**
      * Call-site category associated with this selector.
      */
     public CallType callType;
 
+    public static MethodHandle maybeWrapWithExceptionHandler(MethodHandle handle, boolean catchException) {
+        if (handle == null || !catchException) return handle;
+        Class<?> returnType = handle.type().returnType();
+        if (returnType != Object.class) {
+            MethodType mtype = MethodType.methodType(returnType, GroovyRuntimeException.class);
+            return MethodHandles.catchException(handle, GroovyRuntimeException.class, UNWRAP_EXCEPTION.asType(mtype));
+        } else {
+            return MethodHandles.catchException(handle, GroovyRuntimeException.class, UNWRAP_EXCEPTION);
+        }
+    }
+
     /**
      * Cache values for read-only access
      */
@@ -1033,17 +1052,8 @@ public abstract class Selector {
          * Adds the standard exception handler.
          */
         public void addExceptionHandler() {
-            //TODO: if we would know exactly which paths require the exceptions
-            //      and which paths not, we can sometimes save this guard
-            if (handle == null || !catchException) return;
-            Class<?> returnType = handle.type().returnType();
-            if (returnType != Object.class) {
-                MethodType mtype = MethodType.methodType(returnType, GroovyRuntimeException.class);
-                handle = MethodHandles.catchException(handle, GroovyRuntimeException.class, UNWRAP_EXCEPTION.asType(mtype));
-            } else {
-                handle = MethodHandles.catchException(handle, GroovyRuntimeException.class, UNWRAP_EXCEPTION);
-            }
-            if (LOG_ENABLED) LOG.info("added GroovyRuntimeException unwrapper");
+            handle = maybeWrapWithExceptionHandler(handle, catchException);
+            if (handle != null && LOG_ENABLED) LOG.info("added GroovyRuntimeException unwrapper");
         }
 
         /**
@@ -1052,7 +1062,7 @@ public abstract class Selector {
         public void setGuards(Object receiver) {
             if (!cache || handle == null) return;
 
-            MethodHandle fallback = callSite.getFallbackTarget();
+            MethodHandle fallback = this.fallback != null ? this.fallback : callSite.getFallbackTarget();
 
             // special guards for receiver
             if (receiver instanceof GroovyObject go) {
@@ -1087,8 +1097,10 @@ public abstract class Selector {
             }
 
             // handle constant metaclass and category changes
-            handle = switchPoint.guardWithTest(handle, fallback);
-            if (LOG_ENABLED) LOG.info("added switch point guard");
+            if (!skipSwitchPoint) {
+                handle = switchPoint.guardWithTest(handle, fallback);
+                if (LOG_ENABLED) LOG.info("added switch point guard");
+            }
 
             java.util.function.Predicate<Class<?>> nonFinalOrNullUnsafe = (t) -> {
                 return !Modifier.isFinal(t.getModifiers())