From 672c0765026e74fde5d59a0c497f8e6a94dbd043 Mon Sep 17 00:00:00 2001 From: kevaundray Date: Tue, 11 Nov 2025 23:02:04 +0000 Subject: [PATCH 01/47] chore: merge unstable into sel-alternative (#19) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Optimise `state_root_at_slot` for finalized slot (#8353) This is an optimisation targeted at Fulu networks in non-finality. While debugging on Holesky, we found that `state_root_at_slot` was being called from `prepare_beacon_proposer` a lot, for the finalized state: https://github.com/sigp/lighthouse/blob/2c9b670f5d313450252c6cb40a5ee34802d54fef/beacon_node/http_api/src/lib.rs#L3860-L3861 This was causing `prepare_beacon_proposer` calls to take upwards of 5 seconds, sometimes 10 seconds, because it would trigger _multiple_ beacon state loads in order to iterate back to the finalized slot. Ideally, loading the finalized state should be quick because we keep it cached in the state cache (technically we keep the split state, but they usually coincide). Instead we are computing the finalized state root separately (slow), and then loading the state from the cache (fast). Although it would be possible to make the API faster by removing the `state_root_at_slot` call, I believe it's simpler to change `state_root_at_slot` itself and remove the footgun. Devs rightly expect operations involving the finalized state to be fast. Co-Authored-By: Michael Sproul * Remove Windows CI jobs (#8362) Remove all Windows-related CI jobs Co-Authored-By: antondlr * Update proposer-only section in the documentation (#8358) Co-Authored-By: Tan Chee Keong Co-Authored-By: Michael Sproul * Fix unaggregated delay metric (#8366) while working on this #7892 @michaelsproul pointed it might be a good metric to measure the delay from start of the slot instead of the current `slot_duration / 3`, since the attestations duties start before the `1/3rd` mark now with the change in the link PR. Co-Authored-By: hopinheimer Co-Authored-By: hopinheimer <48147533+hopinheimer@users.noreply.github.com> * Downgrade and remove unnecessary logs (#8367) ### Downgrade a non error to `Debug` I noticed this error on one of our hoodi nodes: ``` Nov 04 05:13:38.892 ERROR Error during data column reconstruction block_root: 0x4271b9efae7deccec3989bd2418e998b83ce8144210c2b17200abb62b7951190, error: DuplicateFullyImported(0x4271b9efae7deccec3989bd2418e998b83ce8144210c2b17200abb62b7951190) ``` This shouldn't be logged as an error and it's due to a normal race condition, and it doesn't impact the node negatively. ### Remove spammy logs This logs is filling up the log files quite quickly and it is also something we'd expect during normal operation - getting columns via EL before gossip. We haven't found this debug log to be useful, so I propose we remove it to avoid spamming debug logs. ``` Received already available column sidecar. Ignoring the column sidecar ``` In the process of removing this, I noticed we aren't propagating the validation result, which I think we should so I've added this. The impact should be quite minimal - the message will stay in the gossip memcache for a bit longer but should be evicted in the next heartbeat. Co-Authored-By: Jimmy Chen * Prepare `sensitive_url` for `crates.io` (#8223) Another good candidate for publishing separately from Lighthouse is `sensitive_url` as it's a general utility crate and not related to Ethereum. This PR prepares it to be spun out into its own crate. I've made the `full` field on `SensitiveUrl` private and instead provided an explicit getter called `.expose_full()`. It's a bit ugly for the diff but I prefer the explicit nature of the getter. I've also added some extra tests and doc strings along with feature gating `Serialize` and `Deserialize` implementations behind the `serde` feature. Co-Authored-By: Mac L * Remove ecdsa feature of libp2p (#8374) This compiles, is there any reason to keep `ecdsa`? CC @jxs Co-Authored-By: Michael Sproul * CI workflows to use warpbuild ci runner (#8343) Self hosted GitHub Runners review and improvements local testnet workflow now uses warpbuild ci runner Co-Authored-By: lemon Co-Authored-By: antondlr * Remove `sensitive_url` and import from `crates.io` (#8377) Use the recently published `sensitive_url` and remove it from Lighthouse Co-Authored-By: Mac L * Migrate derivative to educe (#8125) Fixes #7001. Mostly mechanical replacement of `derivative` attributes with `educe` ones. ### **Attribute Syntax Changes** ```rust // Bounds: = "..." → (...) #[derivative(Hash(bound = "E: EthSpec"))] #[educe(Hash(bound(E: EthSpec)))] // Ignore: = "ignore" → (ignore) #[derivative(PartialEq = "ignore")] #[educe(PartialEq(ignore))] // Default values: value = "..." → expression = ... #[derivative(Default(value = "ForkName::Base"))] #[educe(Default(expression = ForkName::Base))] // Methods: format_with/compare_with = "..." → method(...) #[derivative(Debug(format_with = "fmt_peer_set_as_len"))] #[educe(Debug(method(fmt_peer_set_as_len)))] // Empty bounds: removed entirely, educe can infer appropriate bounds #[derivative(Default(bound = ""))] #[educe(Default)] // Transparent debug: manual implementation (educe doesn't support it) #[derivative(Debug = "transparent")] // Replaced with manual Debug impl that delegates to inner field ``` **Note**: Some bounds use strings (`bound("E: EthSpec")`) for superstruct compatibility (`expected ','` errors). Co-Authored-By: Javier Chávarri Co-Authored-By: Mac L * Fix flaky reconstruction test (#8321) FIx flaky tests that depends on timing. Previously the test processes all 128 columns and expect reconstruction to happen after all columns are processed. There is a race here, and reconstruction could be triggered before all columns are processed. I've updated the tests to process 64 columns, just enough for reconstruction and wait for 50ms for reconstruction to be triggered. This PR requires the change made in https://github.com/sigp/lighthouse/pull/8194 for the test to pass consistently (blob count set to 1 for all blocks instead of random blob count between 0..max) Co-Authored-By: Jimmy Chen Co-Authored-By: Jimmy Chen * Remove `ethers-core` from `execution_layer` (#8149) #6022 Use `alloy_rpc_types::Transaction` to replace the `ethers_core::Transaction` inside the execution block generator. Co-Authored-By: Mac L * Include block root in publish block logs (#8111) Debugging https://github.com/sigp/lighthouse/issues/8104 it would have been helpful to quickly see in the logs that a specific block was submitted into the HTTP API. Because we want to optimize the block root computation we don't include it in the logs, and just log the block slot. I believe we can take a minute performance hit to have the block root in all the logs during block publishing. Co-Authored-By: dapplion <35266934+dapplion@users.noreply.github.com> Co-Authored-By: Jimmy Chen * fix: clarify `bb` vs `bl` variable names in BeaconProcessorQueue (#8315) since block and blob both start with `bl`, it was not clear how to differentiate between `blbroots_queue` and `bbroots_queue` After renaming, there also seems to be a discrepancy Co-Authored-By: Kevaundray Wedderburn * Migrate the `deposit_contract` crate to `alloy` (#8139) https://github.com/sigp/lighthouse/issues/6022 Switches the `deposit_contract` crate to use the `alloy` ecosystem and removes the dependency on `ethabi` Co-Authored-By: Mac L --------- Co-authored-by: Michael Sproul Co-authored-by: Michael Sproul Co-authored-by: antondlr Co-authored-by: chonghe <44791194+chong-he@users.noreply.github.com> Co-authored-by: hopinheimer <48147533+hopinheimer@users.noreply.github.com> Co-authored-by: Jimmy Chen Co-authored-by: Jimmy Chen Co-authored-by: Mac L Co-authored-by: lmnzx Co-authored-by: Javier Chávarri Co-authored-by: Lion - dapplion <35266934+dapplion@users.noreply.github.com> --- .github/workflows/local-testnet.yml | 18 +- .github/workflows/release.yml | 39 +- .github/workflows/test-suite.yml | 79 +- Cargo.lock | 842 +++++++++++------- Cargo.toml | 12 +- beacon_node/beacon_chain/Cargo.toml | 2 +- beacon_node/beacon_chain/src/beacon_chain.rs | 6 + .../src/beacon_fork_choice_store.rs | 8 +- .../beacon_chain/src/blob_verification.rs | 6 +- .../beacon_chain/src/block_verification.rs | 6 +- .../src/block_verification_types.rs | 10 +- .../src/data_column_verification.rs | 14 +- ...ght_client_finality_update_verification.rs | 6 +- ...t_client_optimistic_update_verification.rs | 6 +- beacon_node/beacon_chain/src/metrics.rs | 2 +- .../beacon_chain/src/observed_operations.rs | 8 +- .../src/sync_committee_verification.rs | 6 +- .../beacon_chain/src/validator_monitor.rs | 2 +- beacon_node/beacon_chain/tests/store_tests.rs | 4 + beacon_node/beacon_processor/src/lib.rs | 58 +- beacon_node/builder_client/src/lib.rs | 14 +- beacon_node/execution_layer/Cargo.toml | 2 +- .../execution_layer/src/engine_api/http.rs | 2 +- beacon_node/execution_layer/src/lib.rs | 1 - .../test_utils/execution_block_generator.rs | 8 +- beacon_node/http_api/src/publish_blocks.rs | 23 +- beacon_node/lighthouse_network/Cargo.toml | 1 - beacon_node/network/Cargo.toml | 2 +- .../gossip_methods.rs | 11 +- .../src/network_beacon_processor/mod.rs | 3 + .../src/network_beacon_processor/tests.rs | 33 +- beacon_node/network/src/sync/batch.rs | 8 +- .../sync/block_lookups/single_block_lookup.rs | 26 +- beacon_node/operation_pool/Cargo.toml | 2 +- beacon_node/operation_pool/src/persistence.rs | 7 +- book/src/advanced_blobs.md | 4 +- book/src/advanced_database_migrations.md | 1 + book/src/advanced_proposer_only.md | 4 +- common/deposit_contract/Cargo.toml | 5 +- common/deposit_contract/src/lib.rs | 103 ++- common/eth2/Cargo.toml | 2 +- common/eth2/src/lib.rs | 24 +- common/eth2/src/lighthouse.rs | 26 +- common/eth2/src/lighthouse_vc/http_client.rs | 36 +- common/monitoring_api/src/lib.rs | 2 +- common/sensitive_url/Cargo.toml | 10 - common/sensitive_url/src/lib.rs | 120 --- common/validator_dir/Cargo.toml | 2 +- common/validator_dir/src/validator_dir.rs | 10 +- consensus/state_processing/Cargo.toml | 2 +- .../state_processing/src/verify_operation.rs | 8 +- consensus/types/Cargo.toml | 4 +- consensus/types/src/attestation.rs | 22 +- consensus/types/src/attester_slashing.rs | 14 +- consensus/types/src/beacon_block.rs | 10 +- consensus/types/src/beacon_block_body.rs | 10 +- consensus/types/src/beacon_state.rs | 6 +- .../types/src/beacon_state/committee_cache.rs | 8 +- consensus/types/src/blob_sidecar.rs | 8 +- consensus/types/src/chain_spec.rs | 8 +- consensus/types/src/data_column_sidecar.rs | 8 +- consensus/types/src/data_column_subnet_id.rs | 10 +- consensus/types/src/execution_block_hash.rs | 10 +- consensus/types/src/execution_payload.rs | 10 +- .../types/src/execution_payload_header.rs | 10 +- consensus/types/src/execution_requests.rs | 6 +- consensus/types/src/indexed_attestation.rs | 9 +- consensus/types/src/light_client_bootstrap.rs | 6 +- .../types/src/light_client_finality_update.rs | 6 +- consensus/types/src/light_client_header.rs | 6 +- .../src/light_client_optimistic_update.rs | 6 +- consensus/types/src/light_client_update.rs | 6 +- consensus/types/src/payload.rs | 26 +- consensus/types/src/runtime_var_list.rs | 6 +- consensus/types/src/signed_beacon_block.rs | 10 +- consensus/types/src/sync_aggregate.rs | 8 +- crypto/kzg/Cargo.toml | 2 +- crypto/kzg/src/kzg_commitment.rs | 6 +- lighthouse/tests/beacon_node.rs | 14 +- lighthouse/tests/validator_client.rs | 4 +- slasher/Cargo.toml | 2 +- slasher/src/database/redb_impl.rs | 14 +- testing/ef_tests/Cargo.toml | 2 +- testing/ef_tests/src/handler.rs | 126 +-- .../src/test_rig.rs | 4 +- testing/simulator/Cargo.toml | 2 +- .../beacon_node_fallback/src/lib.rs | 4 +- validator_manager/Cargo.toml | 2 +- validator_manager/src/exit_validators.rs | 5 +- validator_manager/src/import_validators.rs | 8 +- validator_manager/src/list_validators.rs | 3 +- 91 files changed, 1052 insertions(+), 1015 deletions(-) delete mode 100644 common/sensitive_url/Cargo.toml delete mode 100644 common/sensitive_url/src/lib.rs diff --git a/.github/workflows/local-testnet.yml b/.github/workflows/local-testnet.yml index c6f9c075dbd..c129c0ec95c 100644 --- a/.github/workflows/local-testnet.yml +++ b/.github/workflows/local-testnet.yml @@ -14,7 +14,7 @@ concurrency: jobs: dockerfile-ubuntu: - runs-on: ${{ github.repository == 'sigp/lighthouse' && fromJson('["self-hosted", "linux", "CI", "large"]') || 'ubuntu-latest' }} + runs-on: ${{ github.repository == 'sigp/lighthouse' && 'warp-ubuntu-latest-x64-8x' || 'ubuntu-latest' }} steps: - uses: actions/checkout@v5 @@ -31,7 +31,7 @@ jobs: retention-days: 3 run-local-testnet: - runs-on: ubuntu-22.04 + runs-on: ${{ github.repository == 'sigp/lighthouse' && 'warp-ubuntu-latest-x64-8x' || 'ubuntu-latest' }} needs: dockerfile-ubuntu steps: - uses: actions/checkout@v5 @@ -89,7 +89,7 @@ jobs: ${{ steps.assertoor_test_result.outputs.failed_test_details }} EOF ) - + echo "Test Result: $test_result" echo "$test_status" if ! [ "$test_result" == "success" ]; then @@ -100,7 +100,7 @@ jobs: doppelganger-protection-success-test: needs: dockerfile-ubuntu - runs-on: ubuntu-22.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 @@ -136,7 +136,7 @@ jobs: doppelganger-protection-failure-test: needs: dockerfile-ubuntu - runs-on: ubuntu-22.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 @@ -173,7 +173,7 @@ jobs: # Tests checkpoint syncing to a live network (current fork) and a running devnet (usually next scheduled fork) checkpoint-sync-test: name: checkpoint-sync-test-${{ matrix.network }} - runs-on: ubuntu-latest + runs-on: ${{ github.repository == 'sigp/lighthouse' && 'warp-ubuntu-latest-x64-8x' || 'ubuntu-latest' }} needs: dockerfile-ubuntu if: contains(github.event.pull_request.labels.*.name, 'syncing') continue-on-error: true @@ -216,7 +216,7 @@ jobs: # Test syncing from genesis on a local testnet. Aims to cover forward syncing both short and long distances. genesis-sync-test: name: genesis-sync-test-${{ matrix.fork }}-${{ matrix.offline_secs }}s - runs-on: ubuntu-latest + runs-on: ${{ github.repository == 'sigp/lighthouse' && 'warp-ubuntu-latest-x64-8x' || 'ubuntu-latest' }} needs: dockerfile-ubuntu strategy: matrix: @@ -259,7 +259,7 @@ jobs: # a PR is safe to merge. New jobs should be added here. local-testnet-success: name: local-testnet-success - runs-on: ubuntu-latest + runs-on: ${{ github.repository == 'sigp/lighthouse' && 'warp-ubuntu-latest-x64-8x' || 'ubuntu-latest' }} needs: [ 'dockerfile-ubuntu', 'run-local-testnet', @@ -272,4 +272,4 @@ jobs: - name: Check that success job is dependent on all others run: | exclude_jobs='checkpoint-sync-test' - ./scripts/ci/check-success-job.sh ./.github/workflows/local-testnet.yml local-testnet-success "$exclude_jobs" + ./scripts/ci/check-success-job.sh ./.github/workflows/local-testnet.yml local-testnet-success "$exclude_jobs" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7c85cdd05cc..f7b65f07c91 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -32,8 +32,7 @@ jobs: matrix: arch: [aarch64-unknown-linux-gnu, x86_64-unknown-linux-gnu, - aarch64-apple-darwin, - x86_64-windows] + aarch64-apple-darwin] include: - arch: aarch64-unknown-linux-gnu runner: ${{ github.repository == 'sigp/lighthouse' && fromJson('["self-hosted", "linux", "release", "large"]') || 'ubuntu-latest' }} @@ -44,9 +43,6 @@ jobs: - arch: aarch64-apple-darwin runner: macos-14 profile: maxperf - - arch: x86_64-windows - runner: ${{ github.repository == 'sigp/lighthouse' && fromJson('["self-hosted", "windows", "release"]') || 'windows-2019' }} - profile: maxperf runs-on: ${{ matrix.runner }} needs: extract-version @@ -57,19 +53,6 @@ jobs: if: env.SELF_HOSTED_RUNNERS == 'false' run: rustup update stable - # ============================== - # Windows dependencies - # ============================== - - - uses: KyleMayes/install-llvm-action@v1 - if: env.SELF_HOSTED_RUNNERS == 'false' && startsWith(matrix.arch, 'x86_64-windows') - with: - version: "17.0" - directory: ${{ runner.temp }}/llvm - - name: Set LIBCLANG_PATH - if: startsWith(matrix.arch, 'x86_64-windows') - run: echo "LIBCLANG_PATH=$((gcm clang).source -replace "clang.exe")" >> $env:GITHUB_ENV - # ============================== # Builds # ============================== @@ -94,12 +77,7 @@ jobs: if: matrix.arch == 'aarch64-apple-darwin' run: cargo install --path lighthouse --force --locked --features portable,gnosis --profile ${{ matrix.profile }} - - name: Build Lighthouse for Windows - if: matrix.arch == 'x86_64-windows' - run: cargo install --path lighthouse --force --locked --features portable,gnosis --profile ${{ matrix.profile }} - - name: Configure GPG and create artifacts - if: startsWith(matrix.arch, 'x86_64-windows') != true env: GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} @@ -118,20 +96,6 @@ jobs: done mv *tar.gz* .. - - name: Configure GPG and create artifacts Windows - if: startsWith(matrix.arch, 'x86_64-windows') - env: - GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }} - GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} - run: | - echo $env:GPG_SIGNING_KEY | gpg --batch --import - mkdir artifacts - move $env:USERPROFILE/.cargo/bin/lighthouse.exe ./artifacts - cd artifacts - tar -czf lighthouse-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.arch }}.tar.gz lighthouse.exe - gpg --passphrase "$env:GPG_PASSPHRASE" --batch --pinentry-mode loopback -ab lighthouse-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.arch }}.tar.gz - move *tar.gz* .. - # ======================================================================= # Upload artifacts # This is required to share artifacts between different jobs @@ -239,7 +203,6 @@ jobs: | Apple logo | aarch64 | [lighthouse-${{ env.VERSION }}-aarch64-apple-darwin.tar.gz](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/lighthouse-${{ env.VERSION }}-aarch64-apple-darwin.tar.gz) | [PGP Signature](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/lighthouse-${{ env.VERSION }}-aarch64-apple-darwin.tar.gz.asc) | | Linux logo | x86_64 | [lighthouse-${{ env.VERSION }}-x86_64-unknown-linux-gnu.tar.gz](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/lighthouse-${{ env.VERSION }}-x86_64-unknown-linux-gnu.tar.gz) | [PGP Signature](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/lighthouse-${{ env.VERSION }}-x86_64-unknown-linux-gnu.tar.gz.asc) | | Raspberrypi logo | aarch64 | [lighthouse-${{ env.VERSION }}-aarch64-unknown-linux-gnu.tar.gz](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/lighthouse-${{ env.VERSION }}-aarch64-unknown-linux-gnu.tar.gz) | [PGP Signature](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/lighthouse-${{ env.VERSION }}-aarch64-unknown-linux-gnu.tar.gz.asc) | - | Windows logo | x86_64 | [lighthouse-${{ env.VERSION }}-x86_64-windows.tar.gz](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/lighthouse-${{ env.VERSION }}-x86_64-windows.tar.gz) | [PGP Signature](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/lighthouse-${{ env.VERSION }}-x86_64-windows.tar.gz.asc) | | | | | | | **System** | **Option** | - | **Resource** | | Docker logo | Docker | [${{ env.VERSION }}](https://hub.docker.com/r/${{ env.IMAGE_NAME }}/tags?page=1&ordering=last_updated&name=${{ env.VERSION }}) | [${{ env.IMAGE_NAME }}](https://hub.docker.com/r/${{ env.IMAGE_NAME }}) | diff --git a/.github/workflows/test-suite.yml b/.github/workflows/test-suite.yml index 0201bf9ae30..cc7282c3517 100644 --- a/.github/workflows/test-suite.yml +++ b/.github/workflows/test-suite.yml @@ -22,8 +22,6 @@ env: # NOTE: this token is a personal access token on Jimmy's account due to the default GITHUB_TOKEN # not having access to other repositories. We should eventually devise a better solution here. LIGHTHOUSE_GITHUB_TOKEN: ${{ secrets.LIGHTHOUSE_GITHUB_TOKEN }} - # Enable self-hosted runners for the sigp repo only. - SELF_HOSTED_RUNNERS: ${{ github.repository == 'sigp/lighthouse' }} # Disable incremental compilation CARGO_INCREMENTAL: 0 # Enable portable to prevent issues with caching `blst` for the wrong CPU type @@ -78,8 +76,7 @@ jobs: name: release-tests-ubuntu needs: [check-labels] if: needs.check-labels.outputs.skip_ci != 'true' - # Use self-hosted runners only on the sigp repo. - runs-on: ${{ github.repository == 'sigp/lighthouse' && fromJson('["self-hosted", "linux", "CI", "large"]') || 'ubuntu-latest' }} + runs-on: ${{ github.repository == 'sigp/lighthouse' && 'warp-ubuntu-latest-x64-8x' || 'ubuntu-latest' }} steps: - uses: actions/checkout@v5 # Set Java version to 21. (required since Web3Signer 24.12.0). @@ -88,7 +85,6 @@ jobs: distribution: 'temurin' java-version: '21' - name: Get latest version of stable Rust - if: env.SELF_HOSTED_RUNNERS == 'false' uses: moonrepo/setup-rust@v1 with: channel: stable @@ -97,7 +93,6 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Install Foundry (anvil) - if: env.SELF_HOSTED_RUNNERS == 'false' uses: foundry-rs/foundry-toolchain@v1 with: version: nightly-ca67d15f4abd46394b324c50e21e66f306a1162d @@ -107,50 +102,16 @@ jobs: if: env.SELF_HOSTED_RUNNERS == 'true' continue-on-error: true run: sccache --show-stats - release-tests-windows: - name: release-tests-windows - needs: [check-labels] - if: needs.check-labels.outputs.skip_ci != 'true' - runs-on: ${{ github.repository == 'sigp/lighthouse' && fromJson('["self-hosted", "windows", "CI"]') || 'windows-2019' }} - steps: - - uses: actions/checkout@v5 - - name: Get latest version of stable Rust - if: env.SELF_HOSTED_RUNNERS == 'false' - uses: moonrepo/setup-rust@v1 - with: - channel: stable - cache-target: release - bins: cargo-nextest - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Install Foundry (anvil) - if: env.SELF_HOSTED_RUNNERS == 'false' - uses: foundry-rs/foundry-toolchain@v1 - with: - version: nightly-ca67d15f4abd46394b324c50e21e66f306a1162d - - name: Install make - if: env.SELF_HOSTED_RUNNERS == 'false' - run: choco install -y make - - name: Set LIBCLANG_PATH - run: echo "LIBCLANG_PATH=$((gcm clang).source -replace "clang.exe")" >> $env:GITHUB_ENV - - name: Run tests in release - run: make test-release - - name: Show cache stats - if: env.SELF_HOSTED_RUNNERS == 'true' - continue-on-error: true - run: sccache --show-stats beacon-chain-tests: name: beacon-chain-tests needs: [check-labels] if: needs.check-labels.outputs.skip_ci != 'true' - # Use self-hosted runners only on the sigp repo. - runs-on: ${{ github.repository == 'sigp/lighthouse' && fromJson('["self-hosted", "linux", "CI", "large"]') || 'ubuntu-latest' }} + runs-on: ${{ github.repository == 'sigp/lighthouse' && 'warp-ubuntu-latest-x64-8x' || 'ubuntu-latest' }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v5 - name: Get latest version of stable Rust - if: env.SELF_HOSTED_RUNNERS == 'false' uses: moonrepo/setup-rust@v1 with: channel: stable @@ -158,22 +119,16 @@ jobs: bins: cargo-nextest - name: Run beacon_chain tests for all known forks run: make test-beacon-chain - - name: Show cache stats - if: env.SELF_HOSTED_RUNNERS == 'true' - continue-on-error: true - run: sccache --show-stats http-api-tests: name: http-api-tests needs: [check-labels] if: needs.check-labels.outputs.skip_ci != 'true' - # Use self-hosted runners only on the sigp repo. - runs-on: ${{ github.repository == 'sigp/lighthouse' && fromJson('["self-hosted", "linux", "CI", "large"]') || 'ubuntu-latest' }} + runs-on: ${{ github.repository == 'sigp/lighthouse' && 'warp-ubuntu-latest-x64-8x' || 'ubuntu-latest' }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v5 - name: Get latest version of stable Rust - if: env.SELF_HOSTED_RUNNERS == 'false' uses: moonrepo/setup-rust@v1 with: channel: stable @@ -181,10 +136,6 @@ jobs: bins: cargo-nextest - name: Run http_api tests for all recent forks run: make test-http-api - - name: Show cache stats - if: env.SELF_HOSTED_RUNNERS == 'true' - continue-on-error: true - run: sccache --show-stats op-pool-tests: name: op-pool-tests needs: [check-labels] @@ -252,29 +203,22 @@ jobs: name: debug-tests-ubuntu needs: [check-labels] if: needs.check-labels.outputs.skip_ci != 'true' - # Use self-hosted runners only on the sigp repo. - runs-on: ${{ github.repository == 'sigp/lighthouse' && fromJson('["self-hosted", "linux", "CI", "large"]') || 'ubuntu-latest' }} + runs-on: ${{ github.repository == 'sigp/lighthouse' && 'warp-ubuntu-latest-x64-8x' || 'ubuntu-latest' }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v5 - name: Get latest version of stable Rust - if: env.SELF_HOSTED_RUNNERS == 'false' uses: moonrepo/setup-rust@v1 with: channel: stable bins: cargo-nextest - name: Install Foundry (anvil) - if: env.SELF_HOSTED_RUNNERS == 'false' uses: foundry-rs/foundry-toolchain@v1 with: version: nightly-ca67d15f4abd46394b324c50e21e66f306a1162d - name: Run tests in debug run: make test-debug - - name: Show cache stats - if: env.SELF_HOSTED_RUNNERS == 'true' - continue-on-error: true - run: sccache --show-stats state-transition-vectors-ubuntu: name: state-transition-vectors-ubuntu needs: [check-labels] @@ -293,14 +237,12 @@ jobs: name: ef-tests-ubuntu needs: [check-labels] if: needs.check-labels.outputs.skip_ci != 'true' - # Use self-hosted runners only on the sigp repo. - runs-on: ${{ github.repository == 'sigp/lighthouse' && fromJson('["self-hosted", "linux", "CI", "small"]') || 'ubuntu-latest' }} + runs-on: ${{ github.repository == 'sigp/lighthouse' && 'warp-ubuntu-latest-x64-8x' || 'ubuntu-latest' }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v5 - name: Get latest version of stable Rust - if: env.SELF_HOSTED_RUNNERS == 'false' uses: moonrepo/setup-rust@v1 with: channel: stable @@ -308,10 +250,6 @@ jobs: bins: cargo-nextest - name: Run consensus-spec-tests with blst and fake_crypto run: make test-ef - - name: Show cache stats - if: env.SELF_HOSTED_RUNNERS == 'true' - continue-on-error: true - run: sccache --show-stats basic-simulator-ubuntu: name: basic-simulator-ubuntu needs: [check-labels] @@ -360,11 +298,10 @@ jobs: name: execution-engine-integration-ubuntu needs: [check-labels] if: needs.check-labels.outputs.skip_ci != 'true' - runs-on: ${{ github.repository == 'sigp/lighthouse' && fromJson('["self-hosted", "linux", "CI", "small"]') || 'ubuntu-latest' }} + runs-on: ${{ github.repository == 'sigp/lighthouse' && 'warp-ubuntu-latest-x64-8x' || 'ubuntu-latest' }} steps: - uses: actions/checkout@v5 - name: Get latest version of stable Rust - if: env.SELF_HOSTED_RUNNERS == 'false' uses: moonrepo/setup-rust@v1 with: channel: stable @@ -372,9 +309,6 @@ jobs: cache: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Add go compiler to $PATH - if: env.SELF_HOSTED_RUNNERS == 'true' - run: echo "/usr/local/go/bin" >> $GITHUB_PATH - name: Run exec engine integration tests in release run: make test-exec-engine check-code: @@ -501,7 +435,6 @@ jobs: 'check-labels', 'target-branch-check', 'release-tests-ubuntu', - 'release-tests-windows', 'beacon-chain-tests', 'op-pool-tests', 'network-tests', diff --git a/Cargo.lock b/Cargo.lock index edd8fa83ed5..5b960ea0141 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -140,21 +140,59 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy-consensus" -version = "0.14.0" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2179ba839ac532f50279f5da2a6c5047f791f03f6f808b4dfab11327b97902f" +checksum = "3abecb92ba478a285fbf5689100dbafe4003ded4a09bf4b5ef62cca87cd4f79e" dependencies = [ "alloy-eips", "alloy-primitives", "alloy-rlp", + "alloy-serde", "alloy-trie", + "alloy-tx-macros", "auto_impl 1.2.1", + "c-kzg", "derive_more 2.0.1", "either", + "k256 0.13.4", "once_cell", + "rand 0.8.5", + "secp256k1", + "serde", + "serde_json", "thiserror 2.0.12", ] +[[package]] +name = "alloy-consensus-any" +version = "1.0.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e864d4f11d1fb8d3ac2fd8f3a15f1ee46d55ec6d116b342ed1b2cb737f25894" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "serde", +] + +[[package]] +name = "alloy-dyn-abi" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdff496dd4e98a81f4861e66f7eaf5f2488971848bb42d9c892f871730245c8" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-type-parser", + "alloy-sol-types", + "itoa", + "serde", + "serde_json", + "winnow", +] + [[package]] name = "alloy-eip2124" version = "0.2.0" @@ -164,6 +202,7 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "crc", + "serde", "thiserror 2.0.12", ] @@ -175,52 +214,83 @@ checksum = "dbe3e16484669964c26ac48390245d84c410b1a5f968976076c17184725ef235" dependencies = [ "alloy-primitives", "alloy-rlp", + "serde", ] [[package]] name = "alloy-eip7702" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "804cefe429015b4244966c006d25bda5545fa9db5990e9c9079faf255052f50a" +checksum = "9d4769c6ffddca380b0070d71c8b7f30bed375543fe76bb2f74ec0acf4b7cd16" dependencies = [ "alloy-primitives", "alloy-rlp", + "serde", "thiserror 2.0.12", ] [[package]] name = "alloy-eips" -version = "0.14.0" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "609515c1955b33af3d78d26357540f68c5551a90ef58fd53def04f2aa074ec43" +checksum = "07d9a64522a0db6ebcc4ff9c904e329e77dd737c2c25d30f1bdc32ca6c6ce334" dependencies = [ "alloy-eip2124", "alloy-eip2930", "alloy-eip7702", "alloy-primitives", "alloy-rlp", + "alloy-serde", "auto_impl 1.2.1", + "c-kzg", "derive_more 2.0.1", "either", + "serde", + "serde_with", "sha2 0.10.8", + "thiserror 2.0.12", +] + +[[package]] +name = "alloy-json-abi" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5513d5e6bd1cba6bdcf5373470f559f320c05c8c59493b6e98912fbe6733943f" +dependencies = [ + "alloy-primitives", + "alloy-sol-type-parser", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-network-primitives" +version = "1.0.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219dccd2cf753a43bd9b0fbb7771a16927ffdb56e43e3a15755bef1a74d614aa" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-serde", + "serde", ] [[package]] name = "alloy-primitives" -version = "1.0.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70b98b99c1dcfbe74d7f0b31433ff215e7d1555e367d90e62db904f3c9d4ff53" +checksum = "355bf68a433e0fd7f7d33d5a9fc2583fde70bf5c530f63b80845f8da5505cf28" dependencies = [ "alloy-rlp", "arbitrary", "bytes", "cfg-if", "const-hex", - "derive_arbitrary", "derive_more 2.0.1", - "foldhash", + "foldhash 0.2.0", "getrandom 0.3.1", - "hashbrown 0.15.2", + "hashbrown 0.16.0", "indexmap 2.8.0", "itoa", "k256 0.13.4", @@ -232,15 +302,15 @@ dependencies = [ "ruint", "rustc-hash 2.1.1", "serde", - "sha3 0.10.8", + "sha3", "tiny-keccak", ] [[package]] name = "alloy-rlp" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6c1d995bff8d011f7cd6c81820d51825e6e06d6db73914c1630ecf544d83d6" +checksum = "5f70d83b765fdc080dbcd4f4db70d8d23fe4761f2f02ebfa9146b833900634b4" dependencies = [ "alloy-rlp-derive", "arrayvec", @@ -249,30 +319,144 @@ dependencies = [ [[package]] name = "alloy-rlp-derive" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a40e1ef334153322fd878d07e86af7a529bcb86b2439525920a88eba87bcf943" +checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" dependencies = [ "proc-macro2", "quote", "syn 2.0.100", ] +[[package]] +name = "alloy-rpc-types-eth" +version = "1.0.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0185f68a0f8391ab996d335a887087d7ccdbc97952efab3516f6307d456ba2cd" +dependencies = [ + "alloy-consensus", + "alloy-consensus-any", + "alloy-eips", + "alloy-network-primitives", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "alloy-sol-types", + "itertools 0.14.0", + "serde", + "serde_json", + "thiserror 2.0.12", +] + +[[package]] +name = "alloy-serde" +version = "1.0.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "596cfa360922ba9af901cc7370c68640e4f72adb6df0ab064de32f21fec498d7" +dependencies = [ + "alloy-primitives", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-sol-macro" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3ce480400051b5217f19d6e9a82d9010cdde20f1ae9c00d53591e4a1afbb312" +dependencies = [ + "alloy-sol-macro-expander", + "alloy-sol-macro-input", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "alloy-sol-macro-expander" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d792e205ed3b72f795a8044c52877d2e6b6e9b1d13f431478121d8d4eaa9028" +dependencies = [ + "alloy-sol-macro-input", + "const-hex", + "heck 0.5.0", + "indexmap 2.8.0", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.100", + "syn-solidity", + "tiny-keccak", +] + +[[package]] +name = "alloy-sol-macro-input" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bd1247a8f90b465ef3f1207627547ec16940c35597875cdc09c49d58b19693c" +dependencies = [ + "const-hex", + "dunce", + "heck 0.5.0", + "macro-string", + "proc-macro2", + "quote", + "syn 2.0.100", + "syn-solidity", +] + +[[package]] +name = "alloy-sol-type-parser" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "954d1b2533b9b2c7959652df3076954ecb1122a28cc740aa84e7b0a49f6ac0a9" +dependencies = [ + "serde", + "winnow", +] + +[[package]] +name = "alloy-sol-types" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70319350969a3af119da6fb3e9bddb1bce66c9ea933600cb297c8b1850ad2a3c" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-macro", + "serde", +] + [[package]] name = "alloy-trie" -version = "0.8.1" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "983d99aa81f586cef9dae38443245e585840fcf0fc58b09aee0b1f27aed1d500" +checksum = "e3412d52bb97c6c6cc27ccc28d4e6e8cf605469101193b50b0bd5813b1f990b5" dependencies = [ "alloy-primitives", "alloy-rlp", "arrayvec", "derive_more 2.0.1", "nybbles", + "serde", "smallvec", "tracing", ] +[[package]] +name = "alloy-tx-macros" +version = "1.0.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab54221eccefa254ce9f65b079c097b1796e48c21c7ce358230f8988d75392fb" +dependencies = [ + "darling 0.21.3", + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "android-tzdata" version = "0.1.1" @@ -412,6 +596,26 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ff" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" +dependencies = [ + "ark-ff-asm 0.5.0", + "ark-ff-macros 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "arrayvec", + "digest 0.10.7", + "educe", + "itertools 0.13.0", + "num-bigint", + "num-traits", + "paste", + "zeroize", +] + [[package]] name = "ark-ff-asm" version = "0.3.0" @@ -432,6 +636,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-ff-asm" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" +dependencies = [ + "quote", + "syn 2.0.100", +] + [[package]] name = "ark-ff-macros" version = "0.3.0" @@ -457,6 +671,19 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-ff-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "ark-serialize" version = "0.3.0" @@ -478,6 +705,18 @@ dependencies = [ "num-bigint", ] +[[package]] +name = "ark-serialize" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" +dependencies = [ + "ark-std 0.5.0", + "arrayvec", + "digest 0.10.7", + "num-bigint", +] + [[package]] name = "ark-std" version = "0.3.0" @@ -498,6 +737,16 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "ark-std" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + [[package]] name = "arraydeque" version = "0.5.1" @@ -515,6 +764,9 @@ name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +dependencies = [ + "serde", +] [[package]] name = "asn1-rs" @@ -870,7 +1122,7 @@ dependencies = [ "bitvec 1.0.1", "bls", "criterion", - "derivative", + "educe", "eth2", "eth2_network_config", "ethereum_hashing", @@ -1053,6 +1305,22 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" +[[package]] +name = "bitcoin-io" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf" + +[[package]] +name = "bitcoin_hashes" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16" +dependencies = [ + "bitcoin-io", + "hex-conservative", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -1075,28 +1343,16 @@ dependencies = [ "radium 0.3.0", ] -[[package]] -name = "bitvec" -version = "0.20.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7774144344a4faa177370406a7ff5f1da24303817368584c6206c8303eb07848" -dependencies = [ - "funty 1.1.0", - "radium 0.6.2", - "tap", - "wyz 0.2.0", -] - [[package]] name = "bitvec" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ - "funty 2.0.0", + "funty", "radium 0.7.0", "tap", - "wyz 0.5.1", + "wyz", ] [[package]] @@ -1114,7 +1370,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" dependencies = [ - "block-padding 0.1.5", + "block-padding", "byte-tools", "byteorder", "generic-array 0.12.4", @@ -1126,7 +1382,6 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "block-padding 0.2.1", "generic-array 0.14.7", ] @@ -1148,12 +1403,6 @@ dependencies = [ "byte-tools", ] -[[package]] -name = "block-padding" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" - [[package]] name = "bls" version = "0.2.0" @@ -1317,6 +1566,8 @@ dependencies = [ "glob", "hex", "libc", + "once_cell", + "serde", ] [[package]] @@ -1649,7 +1900,7 @@ dependencies = [ "serde", "serde_derive", "sha2 0.10.8", - "sha3 0.10.8", + "sha3", "thiserror 1.0.69", ] @@ -2087,6 +2338,16 @@ dependencies = [ "darling_macro 0.20.10", ] +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core 0.21.3", + "darling_macro 0.21.3", +] + [[package]] name = "darling_core" version = "0.13.4" @@ -2115,6 +2376,21 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "serde", + "strsim 0.11.1", + "syn 2.0.100", +] + [[package]] name = "darling_macro" version = "0.13.4" @@ -2137,6 +2413,17 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core 0.21.3", + "quote", + "syn 2.0.100", +] + [[package]] name = "darwin-libproc" version = "0.1.2" @@ -2221,7 +2508,9 @@ dependencies = [ name = "deposit_contract" version = "0.2.0" dependencies = [ - "ethabi 16.0.0", + "alloy-dyn-abi", + "alloy-json-abi", + "alloy-primitives", "ethereum_ssz", "hex", "reqwest 0.11.27", @@ -2248,7 +2537,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" dependencies = [ "const-oid", - "pem-rfc7468", "zeroize", ] @@ -2500,6 +2788,12 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + [[package]] name = "ecdsa" version = "0.14.8" @@ -2522,6 +2816,7 @@ dependencies = [ "digest 0.10.7", "elliptic-curve 0.13.8", "rfc6979 0.4.0", + "serdect", "signature 2.2.0", "spki 0.7.3", ] @@ -2572,7 +2867,7 @@ dependencies = [ "bls", "compare_fields", "context_deserialize", - "derivative", + "educe", "eth2_network_config", "ethereum_ssz", "ethereum_ssz_derive", @@ -2631,6 +2926,9 @@ name = "either" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +dependencies = [ + "serde", +] [[package]] name = "ekzg-bls12-381" @@ -2750,10 +3048,10 @@ dependencies = [ "ff 0.13.1", "generic-array 0.14.7", "group 0.13.0", - "pem-rfc7468", "pkcs8 0.10.2", "rand_core 0.6.4", "sec1 0.7.3", + "serdect", "subtle", "zeroize", ] @@ -2782,7 +3080,7 @@ dependencies = [ "log", "rand 0.8.5", "serde", - "sha3 0.10.8", + "sha3", "zeroize", ] @@ -2883,7 +3181,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.8", - "sha3 0.10.8", + "sha3", "thiserror 1.0.69", "uuid 0.8.2", ] @@ -2892,7 +3190,7 @@ dependencies = [ name = "eth2" version = "0.1.0" dependencies = [ - "derivative", + "educe", "eip_3076", "either", "enr", @@ -3022,78 +3320,36 @@ dependencies = [ "tempfile", ] -[[package]] -name = "ethabi" -version = "16.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c98847055d934070b90e806e12d3936b787d0a115068981c1d8dfd5dfef5a5" -dependencies = [ - "ethereum-types 0.12.1", - "hex", - "serde", - "serde_json", - "sha3 0.9.1", - "thiserror 1.0.69", - "uint 0.9.5", -] - [[package]] name = "ethabi" version = "18.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" dependencies = [ - "ethereum-types 0.14.1", + "ethereum-types", "hex", "once_cell", "regex", "serde", "serde_json", - "sha3 0.10.8", + "sha3", "thiserror 1.0.69", "uint 0.9.5", ] -[[package]] -name = "ethbloom" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb684ac8fa8f6c5759f788862bb22ec6fe3cb392f6bfd08e3c64b603661e3f8" -dependencies = [ - "crunchy", - "fixed-hash 0.7.0", - "impl-rlp", - "impl-serde 0.3.2", - "tiny-keccak", -] - [[package]] name = "ethbloom" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" dependencies = [ - "crunchy", - "fixed-hash 0.8.0", - "impl-codec 0.6.0", - "impl-rlp", - "impl-serde 0.4.0", - "scale-info", - "tiny-keccak", -] - -[[package]] -name = "ethereum-types" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05136f7057fe789f06e6d41d07b34e6f70d8c86e5693b60f97aaa6553553bdaf" -dependencies = [ - "ethbloom 0.11.1", - "fixed-hash 0.7.0", + "crunchy", + "fixed-hash", + "impl-codec", "impl-rlp", - "impl-serde 0.3.2", - "primitive-types 0.10.1", - "uint 0.9.5", + "impl-serde", + "scale-info", + "tiny-keccak", ] [[package]] @@ -3102,12 +3358,12 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" dependencies = [ - "ethbloom 0.13.0", - "fixed-hash 0.8.0", - "impl-codec 0.6.0", + "ethbloom", + "fixed-hash", + "impl-codec", "impl-rlp", - "impl-serde 0.4.0", - "primitive-types 0.12.2", + "impl-serde", + "primitive-types", "scale-info", "uint 0.9.5", ] @@ -3192,7 +3448,7 @@ dependencies = [ "chrono", "convert_case 0.6.0", "elliptic-curve 0.12.3", - "ethabi 18.0.0", + "ethabi", "generic-array 0.14.7", "hex", "k256 0.11.6", @@ -3376,13 +3632,13 @@ dependencies = [ "alloy-consensus", "alloy-primitives", "alloy-rlp", + "alloy-rpc-types-eth", "arc-swap", "builder_client", "bytes", "eth2", "ethereum_serde_utils", "ethereum_ssz", - "ethers-core", "fixed_bytes", "fork_choice", "hash-db", @@ -3528,18 +3784,6 @@ dependencies = [ "windows-acl", ] -[[package]] -name = "fixed-hash" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" -dependencies = [ - "byteorder", - "rand 0.8.5", - "rustc-hex", - "static_assertions", -] - [[package]] name = "fixed-hash" version = "0.8.0" @@ -3583,6 +3827,12 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + [[package]] name = "foreign-types" version = "0.3.2" @@ -3641,12 +3891,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "funty" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" - [[package]] name = "funty" version = "2.0.0" @@ -4017,7 +4261,16 @@ checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" dependencies = [ "allocator-api2", "equivalent", - "foldhash", + "foldhash 0.1.4", +] + +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +dependencies = [ + "foldhash 0.2.0", "serde", ] @@ -4143,6 +4396,15 @@ dependencies = [ "serde", ] +[[package]] +name = "hex-conservative" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd" +dependencies = [ + "arrayvec", +] + [[package]] name = "hex_fmt" version = "0.3.0" @@ -4716,22 +4978,13 @@ dependencies = [ "xmltree", ] -[[package]] -name = "impl-codec" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "161ebdfec3c8e3b52bf61c4f3550a1eea4f9579d10dc1b936f3171ebdcd6c443" -dependencies = [ - "parity-scale-codec 2.3.1", -] - [[package]] name = "impl-codec" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" dependencies = [ - "parity-scale-codec 3.7.4", + "parity-scale-codec", ] [[package]] @@ -4743,15 +4996,6 @@ dependencies = [ "rlp", ] -[[package]] -name = "impl-serde" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4551f042f3438e64dbd6226b20527fc84a6e1fe65688b58746a2f53623f25f5c" -dependencies = [ - "serde", -] - [[package]] name = "impl-serde" version = "0.4.0" @@ -4991,7 +5235,7 @@ dependencies = [ "ecdsa 0.14.8", "elliptic-curve 0.12.3", "sha2 0.10.8", - "sha3 0.10.8", + "sha3", ] [[package]] @@ -5004,6 +5248,7 @@ dependencies = [ "ecdsa 0.16.9", "elliptic-curve 0.13.8", "once_cell", + "serdect", "sha2 0.10.8", "signature 2.2.0", ] @@ -5033,7 +5278,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b286e6b663fb926e1eeb68528e69cb70ed46c6d65871a21b2215ae8154c6d3c" dependencies = [ - "primitive-types 0.12.2", + "primitive-types", "tiny-keccak", ] @@ -5044,7 +5289,7 @@ dependencies = [ "arbitrary", "c-kzg", "criterion", - "derivative", + "educe", "ethereum_hashing", "ethereum_serde_utils", "ethereum_ssz", @@ -5328,10 +5573,8 @@ dependencies = [ "hkdf", "k256 0.13.4", "multihash", - "p256", "quick-protobuf", "rand 0.8.5", - "sec1 0.7.3", "sha2 0.10.8", "thiserror 2.0.12", "tracing", @@ -5874,6 +6117,17 @@ dependencies = [ "libc", ] +[[package]] +name = "macro-string" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "malloc_utils" version = "0.1.0" @@ -6341,7 +6595,7 @@ dependencies = [ "beacon_processor", "bls", "delay_map", - "derivative", + "educe", "eth2", "eth2_network_config", "ethereum_ssz", @@ -6557,11 +6811,13 @@ dependencies = [ [[package]] name = "nybbles" -version = "0.3.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8983bb634df7248924ee0c4c3a749609b5abcb082c28fffe3254b3eb3602b307" +checksum = "2c4b5ecbd0beec843101bffe848217f770e8b8da81d8355b7d6e226f2199b3dc" dependencies = [ - "const-hex", + "cfg-if", + "ruint", + "serde", "smallvec", ] @@ -6627,7 +6883,7 @@ dependencies = [ "arrayvec", "auto_impl 1.2.1", "bytes", - "ethereum-types 0.14.1", + "ethereum-types", "open-fastrlp-derive", ] @@ -6777,7 +7033,7 @@ version = "0.2.0" dependencies = [ "beacon_chain", "bitvec 1.0.1", - "derivative", + "educe", "ethereum_ssz", "ethereum_ssz_derive", "itertools 0.10.5", @@ -6802,18 +7058,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "p256" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" -dependencies = [ - "ecdsa 0.16.9", - "elliptic-curve 0.13.8", - "primeorder", - "sha2 0.10.8", -] - [[package]] name = "pairing" version = "0.23.0" @@ -6823,20 +7067,6 @@ dependencies = [ "group 0.13.0", ] -[[package]] -name = "parity-scale-codec" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "373b1a4c1338d9cd3d1fa53b3a11bdab5ab6bd80a20f7f7becd76953ae2be909" -dependencies = [ - "arrayvec", - "bitvec 0.20.4", - "byte-slice-cast", - "impl-trait-for-tuples", - "parity-scale-codec-derive 2.3.1", - "serde", -] - [[package]] name = "parity-scale-codec" version = "3.7.4" @@ -6848,30 +7078,18 @@ dependencies = [ "byte-slice-cast", "const_format", "impl-trait-for-tuples", - "parity-scale-codec-derive 3.7.4", + "parity-scale-codec-derive", "rustversion", "serde", ] -[[package]] -name = "parity-scale-codec-derive" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1557010476e0595c9b568d16dcfb81b93cdeb157612726f5170d31aa707bed27" -dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "parity-scale-codec-derive" version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "581c837bb6b9541ce7faa9377c20616e4fb7650f6b0f68bc93c827ee504fb7b3" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.100", @@ -6979,15 +7197,6 @@ dependencies = [ "serde", ] -[[package]] -name = "pem-rfc7468" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" -dependencies = [ - "base64ct", -] - [[package]] name = "percent-encoding" version = "2.3.1" @@ -7210,59 +7419,27 @@ dependencies = [ "syn 2.0.100", ] -[[package]] -name = "primeorder" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" -dependencies = [ - "elliptic-curve 0.13.8", -] - -[[package]] -name = "primitive-types" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e4722c697a58a99d5d06a08c30821d7c082a4632198de1eaa5a6c22ef42373" -dependencies = [ - "fixed-hash 0.7.0", - "impl-codec 0.5.1", - "impl-rlp", - "impl-serde 0.3.2", - "uint 0.9.5", -] - [[package]] name = "primitive-types" version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ - "fixed-hash 0.8.0", - "impl-codec 0.6.0", + "fixed-hash", + "impl-codec", "impl-rlp", - "impl-serde 0.4.0", + "impl-serde", "scale-info", "uint 0.9.5", ] -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit 0.19.15", -] - [[package]] name = "proc-macro-crate" version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ - "toml_edit 0.22.24", + "toml_edit", ] [[package]] @@ -7289,6 +7466,28 @@ dependencies = [ "version_check", ] +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "proc-macro2" version = "1.0.94" @@ -7386,9 +7585,9 @@ dependencies = [ [[package]] name = "proptest-derive" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee1c9ac207483d5e7db4940700de86a9aae46ef90c48b57f99fe7edb8345e49" +checksum = "095a99f75c69734802359b682be8daaf8980296731f6470434ea2c652af1dd30" dependencies = [ "proc-macro2", "quote", @@ -7597,12 +7796,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "def50a86306165861203e7f84ecffbbdfdea79f0e51039b33de1e952358c47ac" -[[package]] -name = "radium" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "643f8f41a8ebc4c5dc4515c82bb8abd397b527fc20fd681b7c011c2aee5d44fb" - [[package]] name = "radium" version = "0.7.0" @@ -7618,6 +7811,7 @@ dependencies = [ "libc", "rand_chacha 0.3.1", "rand_core 0.6.4", + "serde", ] [[package]] @@ -8002,28 +8196,29 @@ dependencies = [ [[package]] name = "ruint" -version = "1.14.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78a46eb779843b2c4f21fac5773e25d6d5b7c8f0922876c91541790d2ca27eef" +checksum = "a68df0380e5c9d20ce49534f292a36a7514ae21350726efe1865bdb1fa91d278" dependencies = [ "alloy-rlp", "arbitrary", "ark-ff 0.3.0", "ark-ff 0.4.2", + "ark-ff 0.5.0", "bytes", "fastrlp 0.3.1", "fastrlp 0.4.0", "num-bigint", "num-integer", "num-traits", - "parity-scale-codec 3.7.4", - "primitive-types 0.12.2", + "parity-scale-codec", + "primitive-types", "proptest", "rand 0.8.5", "rand 0.9.0", "rlp", "ruint-macro", - "serde", + "serde_core", "valuable", "zeroize", ] @@ -8345,7 +8540,7 @@ checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" dependencies = [ "cfg-if", "derive_more 1.0.0", - "parity-scale-codec 3.7.4", + "parity-scale-codec", "scale-info-derive", ] @@ -8355,7 +8550,7 @@ version = "2.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.100", @@ -8449,10 +8644,32 @@ dependencies = [ "der 0.7.9", "generic-array 0.14.7", "pkcs8 0.10.2", + "serdect", "subtle", "zeroize", ] +[[package]] +name = "secp256k1" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252" +dependencies = [ + "bitcoin_hashes", + "rand 0.8.5", + "secp256k1-sys", + "serde", +] + +[[package]] +name = "secp256k1-sys" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" +dependencies = [ + "cc", +] + [[package]] name = "security-framework" version = "2.11.1" @@ -8525,6 +8742,8 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "sensitive_url" version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb7b0221fa9905eec4163dbf7660b1876cc95663af1deddc3e19ebe49167c58c" dependencies = [ "serde", "url", @@ -8532,10 +8751,11 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ + "serde_core", "serde_derive", ] @@ -8570,11 +8790,20 @@ dependencies = [ "serde_urlencoded", ] +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -8626,6 +8855,28 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04" +dependencies = [ + "serde_core", + "serde_with_macros", +] + +[[package]] +name = "serde_with_macros" +version = "3.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955" +dependencies = [ + "darling 0.21.3", + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "serde_yaml" version = "0.9.34+deprecated" @@ -8639,6 +8890,16 @@ dependencies = [ "unsafe-libyaml", ] +[[package]] +name = "serdect" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" +dependencies = [ + "base16ct 0.2.0", + "serde", +] + [[package]] name = "sha1" version = "0.10.6" @@ -8686,18 +8947,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "sha3" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" -dependencies = [ - "block-buffer 0.9.0", - "digest 0.9.0", - "keccak", - "opaque-debug 0.3.1", -] - [[package]] name = "sha3" version = "0.10.8" @@ -8832,7 +9081,7 @@ version = "0.1.0" dependencies = [ "bincode", "byteorder", - "derivative", + "educe", "ethereum_ssz", "ethereum_ssz_derive", "filesystem", @@ -8910,6 +9159,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" dependencies = [ "arbitrary", + "serde", ] [[package]] @@ -9001,7 +9251,7 @@ dependencies = [ "arbitrary", "beacon_chain", "bls", - "derivative", + "educe", "ethereum_hashing", "ethereum_ssz", "ethereum_ssz_derive", @@ -9159,6 +9409,18 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn-solidity" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff790eb176cc81bb8936aed0f7b9f14fc4670069a2d371b3e3b0ecce908b2cb3" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "sync_wrapper" version = "0.1.2" @@ -9624,17 +9886,6 @@ version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap 2.8.0", - "toml_datetime", - "winnow 0.5.40", -] - [[package]] name = "toml_edit" version = "0.22.24" @@ -9643,7 +9894,7 @@ checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ "indexmap 2.8.0", "toml_datetime", - "winnow 0.7.3", + "winnow", ] [[package]] @@ -9939,7 +10190,7 @@ dependencies = [ "compare_fields", "context_deserialize", "criterion", - "derivative", + "educe", "eth2_interop_keypairs", "ethereum_hashing", "ethereum_serde_utils", @@ -10183,7 +10434,7 @@ version = "0.1.0" dependencies = [ "bls", "deposit_contract", - "derivative", + "educe", "eth2_keystore", "filesystem", "hex", @@ -10271,7 +10522,7 @@ dependencies = [ "beacon_chain", "clap", "clap_utils", - "derivative", + "educe", "environment", "eth2", "eth2_network_config", @@ -11092,15 +11343,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" -[[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - [[package]] name = "winnow" version = "0.7.3" @@ -11168,12 +11410,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wyz" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" - [[package]] name = "wyz" version = "0.5.1" diff --git a/Cargo.toml b/Cargo.toml index 21b7b966ef7..f9f6b3bf86a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -40,7 +40,6 @@ members = [ "common/network_utils", "common/oneshot_broadcast", "common/pretty_reqwest_error", - "common/sensitive_url", "common/slot_clock", "common/system_health", "common/target_check", @@ -101,9 +100,10 @@ version = "8.0.0" [workspace.dependencies] account_utils = { path = "common/account_utils" } -alloy-consensus = { version = "0.14.0", default-features = false } -alloy-primitives = { version = "1.0", features = ["rlp", "getrandom"] } -alloy-rlp = "0.3.4" +alloy-consensus = { version = "=1.0.42", default-features = false } +alloy-primitives = { version = "=1.4.1", default-features = false, features = ["rlp", "getrandom"] } +alloy-rlp = { version = "=0.3.12", default-features = false } +alloy-rpc-types-eth = { version = "=1.0.42", default-features = false, features = ["serde"] } anyhow = "1" arbitrary = { version = "1", features = ["derive"] } async-channel = "1.9.0" @@ -132,11 +132,11 @@ context_deserialize_derive = { path = "consensus/context_deserialize/context_des criterion = "0.5" delay_map = "0.4" deposit_contract = { path = "common/deposit_contract" } -derivative = "2" directory = { path = "common/directory" } dirs = "3" discv5 = { version = "0.10", features = ["libp2p"] } doppelganger_service = { path = "validator_client/doppelganger_service" } +educe = "0.6" eip_3076 = { path = "common/eip_3076" } either = "1.9" environment = { path = "lighthouse/environment" } @@ -228,7 +228,7 @@ rpds = "0.11" rusqlite = { version = "0.28", features = ["bundled"] } rust_eth_kzg = "0.9" safe_arith = "0.1" -sensitive_url = { path = "common/sensitive_url" } +sensitive_url = { version = "0.1", features = ["serde"] } serde = { version = "1", features = ["derive"] } serde_json = "1" serde_repr = "0.1" diff --git a/beacon_node/beacon_chain/Cargo.toml b/beacon_node/beacon_chain/Cargo.toml index bbc88516a5a..7d7332da575 100644 --- a/beacon_node/beacon_chain/Cargo.toml +++ b/beacon_node/beacon_chain/Cargo.toml @@ -18,7 +18,7 @@ test_backfill = [] alloy-primitives = { workspace = true } bitvec = { workspace = true } bls = { workspace = true } -derivative = { workspace = true } +educe = { workspace = true } eth2 = { workspace = true } eth2_network_config = { workspace = true } ethereum_hashing = { workspace = true } diff --git a/beacon_node/beacon_chain/src/beacon_chain.rs b/beacon_node/beacon_chain/src/beacon_chain.rs index b9a4f8ab2e7..af70b006add 100644 --- a/beacon_node/beacon_chain/src/beacon_chain.rs +++ b/beacon_node/beacon_chain/src/beacon_chain.rs @@ -897,6 +897,12 @@ impl BeaconChain { return Ok(None); } + // Fast-path for the split slot (which usually corresponds to the finalized slot). + let split = self.store.get_split_info(); + if request_slot == split.slot { + return Ok(Some(split.state_root)); + } + // Try an optimized path of reading the root directly from the head state. let fast_lookup: Option = self.with_head(|head| { if head.beacon_block.slot() <= request_slot { diff --git a/beacon_node/beacon_chain/src/beacon_fork_choice_store.rs b/beacon_node/beacon_chain/src/beacon_fork_choice_store.rs index 440388661c2..0c203009bbe 100644 --- a/beacon_node/beacon_chain/src/beacon_fork_choice_store.rs +++ b/beacon_node/beacon_chain/src/beacon_fork_choice_store.rs @@ -5,7 +5,7 @@ //! reads when fork choice requires the validator balances of the justified state. use crate::{BeaconSnapshot, metrics}; -use derivative::Derivative; +use educe::Educe; use fork_choice::ForkChoiceStore; use proto_array::JustifiedBalances; use safe_arith::ArithError; @@ -127,10 +127,10 @@ impl BalancesCache { /// Implements `fork_choice::ForkChoiceStore` in order to provide a persistent backing to the /// `fork_choice::ForkChoice` struct. -#[derive(Debug, Derivative)] -#[derivative(PartialEq(bound = "E: EthSpec, Hot: ItemStore, Cold: ItemStore"))] +#[derive(Debug, Educe)] +#[educe(PartialEq(bound(E: EthSpec, Hot: ItemStore, Cold: ItemStore)))] pub struct BeaconForkChoiceStore, Cold: ItemStore> { - #[derivative(PartialEq = "ignore")] + #[educe(PartialEq(ignore))] store: Arc>, balances_cache: BalancesCache, time: Slot, diff --git a/beacon_node/beacon_chain/src/blob_verification.rs b/beacon_node/beacon_chain/src/blob_verification.rs index 53f2eff0ca3..874673b52e8 100644 --- a/beacon_node/beacon_chain/src/blob_verification.rs +++ b/beacon_node/beacon_chain/src/blob_verification.rs @@ -1,4 +1,4 @@ -use derivative::Derivative; +use educe::Educe; use slot_clock::SlotClock; use std::marker::PhantomData; use std::sync::Arc; @@ -245,8 +245,8 @@ impl GossipVerifiedBlob { /// Wrapper over a `BlobSidecar` for which we have completed kzg verification. /// i.e. `verify_blob_kzg_proof(blob, commitment, proof) == true`. -#[derive(Debug, Derivative, Clone, Encode, Decode)] -#[derivative(PartialEq, Eq)] +#[derive(Debug, Educe, Clone, Encode, Decode)] +#[educe(PartialEq, Eq)] #[ssz(struct_behaviour = "transparent")] pub struct KzgVerifiedBlob { blob: Arc>, diff --git a/beacon_node/beacon_chain/src/block_verification.rs b/beacon_node/beacon_chain/src/block_verification.rs index 691293b2000..1ddc51cc351 100644 --- a/beacon_node/beacon_chain/src/block_verification.rs +++ b/beacon_node/beacon_chain/src/block_verification.rs @@ -66,7 +66,7 @@ use crate::{ beacon_chain::{BeaconForkChoice, ForkChoiceError}, metrics, }; -use derivative::Derivative; +use educe::Educe; use eth2::types::{BlockGossip, EventKind}; use execution_layer::PayloadStatus; pub use fork_choice::{AttestationFromBlock, PayloadVerificationStatus}; @@ -689,8 +689,8 @@ pub fn signature_verify_chain_segment( /// A wrapper around a `SignedBeaconBlock` that indicates it has been approved for re-gossiping on /// the p2p network. -#[derive(Derivative)] -#[derivative(Debug(bound = "T: BeaconChainTypes"))] +#[derive(Educe)] +#[educe(Debug(bound(T: BeaconChainTypes)))] pub struct GossipVerifiedBlock { pub block: Arc>, pub block_root: Hash256, diff --git a/beacon_node/beacon_chain/src/block_verification_types.rs b/beacon_node/beacon_chain/src/block_verification_types.rs index 1a0b188fdcd..5978e97c4d9 100644 --- a/beacon_node/beacon_chain/src/block_verification_types.rs +++ b/beacon_node/beacon_chain/src/block_verification_types.rs @@ -2,7 +2,7 @@ use crate::data_availability_checker::AvailabilityCheckError; pub use crate::data_availability_checker::{AvailableBlock, MaybeAvailableBlock}; use crate::data_column_verification::{CustodyDataColumn, CustodyDataColumnList}; use crate::{PayloadVerificationOutcome, get_block_root}; -use derivative::Derivative; +use educe::Educe; use ssz_types::VariableList; use state_processing::ConsensusContext; use std::fmt::{Debug, Formatter}; @@ -26,8 +26,8 @@ use types::{ /// Note: We make a distinction over blocks received over gossip because /// in a post-deneb world, the blobs corresponding to a given block that are received /// over rpc do not contain the proposer signature for dos resistance. -#[derive(Clone, Derivative)] -#[derivative(Hash(bound = "E: EthSpec"))] +#[derive(Clone, Educe)] +#[educe(Hash(bound(E: EthSpec)))] pub struct RpcBlock { block_root: Hash256, block: RpcBlockInner, @@ -80,8 +80,8 @@ impl RpcBlock { /// Note: This variant is intentionally private because we want to safely construct the /// internal variants after applying consistency checks to ensure that the block and blobs /// are consistent with respect to each other. -#[derive(Debug, Clone, Derivative)] -#[derivative(Hash(bound = "E: EthSpec"))] +#[derive(Debug, Clone, Educe)] +#[educe(Hash(bound(E: EthSpec)))] enum RpcBlockInner { /// Single block lookup response. This should potentially hit the data availability cache. Block(Arc>), diff --git a/beacon_node/beacon_chain/src/data_column_verification.rs b/beacon_node/beacon_chain/src/data_column_verification.rs index 7a8066351a3..b9986025667 100644 --- a/beacon_node/beacon_chain/src/data_column_verification.rs +++ b/beacon_node/beacon_chain/src/data_column_verification.rs @@ -4,7 +4,7 @@ use crate::block_verification::{ use crate::kzg_utils::{reconstruct_data_columns, validate_data_columns}; use crate::observed_data_sidecars::{ObservationStrategy, Observe}; use crate::{BeaconChain, BeaconChainError, BeaconChainTypes, metrics}; -use derivative::Derivative; +use educe::Educe; use fork_choice::ProtoBlock; use kzg::{Error as KzgError, Kzg}; use proto_array::Block; @@ -296,8 +296,8 @@ impl GossipVerifiedDataColumn } /// Wrapper over a `DataColumnSidecar` for which we have completed kzg verification. -#[derive(Debug, Derivative, Clone, Encode, Decode)] -#[derivative(PartialEq, Eq)] +#[derive(Debug, Educe, Clone, Encode, Decode)] +#[educe(PartialEq, Eq)] #[ssz(struct_behaviour = "transparent")] pub struct KzgVerifiedDataColumn { data: Arc>, @@ -353,8 +353,8 @@ pub type CustodyDataColumnList = VariableList, ::NumberOfColumns>; /// Data column that we must custody -#[derive(Debug, Derivative, Clone, Encode, Decode)] -#[derivative(PartialEq, Eq, Hash(bound = "E: EthSpec"))] +#[derive(Debug, Educe, Clone, Encode, Decode)] +#[educe(PartialEq, Eq, Hash(bound(E: EthSpec)))] #[ssz(struct_behaviour = "transparent")] pub struct CustodyDataColumn { data: Arc>, @@ -383,8 +383,8 @@ impl CustodyDataColumn { } /// Data column that we must custody and has completed kzg verification -#[derive(Debug, Derivative, Clone, Encode, Decode)] -#[derivative(PartialEq, Eq)] +#[derive(Debug, Educe, Clone, Encode, Decode)] +#[educe(PartialEq, Eq)] #[ssz(struct_behaviour = "transparent")] pub struct KzgVerifiedCustodyDataColumn { data: Arc>, diff --git a/beacon_node/beacon_chain/src/light_client_finality_update_verification.rs b/beacon_node/beacon_chain/src/light_client_finality_update_verification.rs index fe62b8ef903..2dc4de7d04b 100644 --- a/beacon_node/beacon_chain/src/light_client_finality_update_verification.rs +++ b/beacon_node/beacon_chain/src/light_client_finality_update_verification.rs @@ -1,5 +1,5 @@ use crate::{BeaconChain, BeaconChainTypes}; -use derivative::Derivative; +use educe::Educe; use slot_clock::SlotClock; use std::time::Duration; use strum::AsRefStr; @@ -55,8 +55,8 @@ pub enum Error { } /// Wraps a `LightClientFinalityUpdate` that has been verified for propagation on the gossip network. -#[derive(Derivative)] -#[derivative(Clone(bound = "T: BeaconChainTypes"))] +#[derive(Educe)] +#[educe(Clone(bound(T: BeaconChainTypes)))] pub struct VerifiedLightClientFinalityUpdate { light_client_finality_update: LightClientFinalityUpdate, seen_timestamp: Duration, diff --git a/beacon_node/beacon_chain/src/light_client_optimistic_update_verification.rs b/beacon_node/beacon_chain/src/light_client_optimistic_update_verification.rs index b59390ea0c4..4079a374f89 100644 --- a/beacon_node/beacon_chain/src/light_client_optimistic_update_verification.rs +++ b/beacon_node/beacon_chain/src/light_client_optimistic_update_verification.rs @@ -1,5 +1,5 @@ use crate::{BeaconChain, BeaconChainTypes}; -use derivative::Derivative; +use educe::Educe; use eth2::types::Hash256; use slot_clock::SlotClock; use std::time::Duration; @@ -49,8 +49,8 @@ pub enum Error { } /// Wraps a `LightClientOptimisticUpdate` that has been verified for propagation on the gossip network. -#[derive(Derivative)] -#[derivative(Clone(bound = "T: BeaconChainTypes"))] +#[derive(Educe)] +#[educe(Clone(bound(T: BeaconChainTypes)))] pub struct VerifiedLightClientOptimisticUpdate { light_client_optimistic_update: LightClientOptimisticUpdate, pub parent_root: Hash256, diff --git a/beacon_node/beacon_chain/src/metrics.rs b/beacon_node/beacon_chain/src/metrics.rs index 8f1da7b67b7..e6557c7a270 100644 --- a/beacon_node/beacon_chain/src/metrics.rs +++ b/beacon_node/beacon_chain/src/metrics.rs @@ -1185,7 +1185,7 @@ pub static VALIDATOR_MONITOR_UNAGGREGATED_ATTESTATION_DELAY_SECONDS: LazyLock< > = LazyLock::new(|| { try_create_histogram_vec( "validator_monitor_unaggregated_attestation_delay_seconds", - "The delay between when the validator should send the attestation and when it was received.", + "The delay between when the validator sent the attestation and the start of the slot.", &["src", "validator"], ) }); diff --git a/beacon_node/beacon_chain/src/observed_operations.rs b/beacon_node/beacon_chain/src/observed_operations.rs index 49614c5b542..4ca5371242c 100644 --- a/beacon_node/beacon_chain/src/observed_operations.rs +++ b/beacon_node/beacon_chain/src/observed_operations.rs @@ -1,4 +1,4 @@ -use derivative::Derivative; +use educe::Educe; use smallvec::{SmallVec, smallvec}; use state_processing::{SigVerifiedOp, TransformPersist, VerifyOperation, VerifyOperationAt}; use std::collections::HashSet; @@ -14,8 +14,8 @@ pub const SMALL_VEC_SIZE: usize = 8; /// Stateful tracker for exit/slashing operations seen on the network. /// /// Implements the conditions for gossip verification of exits and slashings from the P2P spec. -#[derive(Debug, Derivative)] -#[derivative(Default(bound = "T: ObservableOperation, E: EthSpec"))] +#[derive(Debug, Educe)] +#[educe(Default(bound(T: ObservableOperation, E: EthSpec)))] pub struct ObservedOperations, E: EthSpec> { /// Indices of validators for whom we have already seen an instance of an operation `T`. /// @@ -26,7 +26,7 @@ pub struct ObservedOperations, E: EthSpec> { /// `attestation_1.attester_indices` and `attestation_2.attester_indices`. observed_validator_indices: HashSet, /// The name of the current fork. The default will be overwritten on first use. - #[derivative(Default(value = "ForkName::Base"))] + #[educe(Default(expression = ForkName::Base))] current_fork: ForkName, _phantom: PhantomData<(T, E)>, } diff --git a/beacon_node/beacon_chain/src/sync_committee_verification.rs b/beacon_node/beacon_chain/src/sync_committee_verification.rs index 41d29d5526e..e72e9a6b21f 100644 --- a/beacon_node/beacon_chain/src/sync_committee_verification.rs +++ b/beacon_node/beacon_chain/src/sync_committee_verification.rs @@ -31,7 +31,7 @@ use crate::{ BeaconChain, BeaconChainError, BeaconChainTypes, metrics, observed_aggregates::ObserveOutcome, }; use bls::{PublicKeyBytes, verify_signature_sets}; -use derivative::Derivative; +use educe::Educe; use safe_arith::ArithError; use slot_clock::SlotClock; use ssz_derive::{Decode, Encode}; @@ -261,8 +261,8 @@ impl From for Error { } /// Wraps a `SignedContributionAndProof` that has been verified for propagation on the gossip network.\ -#[derive(Derivative)] -#[derivative(Clone(bound = "T: BeaconChainTypes"))] +#[derive(Educe)] +#[educe(Clone(bound(T: BeaconChainTypes)))] pub struct VerifiedSyncContribution { signed_aggregate: SignedContributionAndProof, participant_pubkeys: Vec, diff --git a/beacon_node/beacon_chain/src/validator_monitor.rs b/beacon_node/beacon_chain/src/validator_monitor.rs index 00c30e5ab1d..ba06d5da4ec 100644 --- a/beacon_node/beacon_chain/src/validator_monitor.rs +++ b/beacon_node/beacon_chain/src/validator_monitor.rs @@ -1214,7 +1214,7 @@ impl ValidatorMonitor { let delay = get_message_delay_ms( seen_timestamp, data.slot, - slot_clock.unagg_attestation_production_delay(), + Duration::from_secs(0), slot_clock, ); diff --git a/beacon_node/beacon_chain/tests/store_tests.rs b/beacon_node/beacon_chain/tests/store_tests.rs index 25f824c19bd..638c221a7fa 100644 --- a/beacon_node/beacon_chain/tests/store_tests.rs +++ b/beacon_node/beacon_chain/tests/store_tests.rs @@ -3155,6 +3155,10 @@ async fn weak_subjectivity_sync_test( .get_state(&state_root, Some(slot), CACHE_STATE_IN_TESTS) .unwrap() .unwrap(); + assert_eq!( + state_root, + beacon_chain.state_root_at_slot(slot).unwrap().unwrap() + ); assert_eq!(state.slot(), slot); assert_eq!(state.canonical_root().unwrap(), state_root); } diff --git a/beacon_node/beacon_processor/src/lib.rs b/beacon_node/beacon_processor/src/lib.rs index 7d21d4ec641..6b33eb1f062 100644 --- a/beacon_node/beacon_processor/src/lib.rs +++ b/beacon_node/beacon_processor/src/lib.rs @@ -124,10 +124,10 @@ pub struct BeaconProcessorQueueLengths { gossip_execution_proof_queue: usize, delayed_block_queue: usize, status_queue: usize, - bbrange_queue: usize, - bbroots_queue: usize, - blbroots_queue: usize, - blbrange_queue: usize, + block_brange_queue: usize, + block_broots_queue: usize, + blob_broots_queue: usize, + blob_brange_queue: usize, dcbroots_queue: usize, dcbrange_queue: usize, gossip_bls_to_execution_change_queue: usize, @@ -191,10 +191,10 @@ impl BeaconProcessorQueueLengths { gossip_execution_proof_queue: 1024, delayed_block_queue: 1024, status_queue: 1024, - bbrange_queue: 1024, - bbroots_queue: 1024, - blbroots_queue: 1024, - blbrange_queue: 1024, + block_brange_queue: 1024, + block_broots_queue: 1024, + blob_broots_queue: 1024, + blob_brange_queue: 1024, dcbroots_queue: 1024, dcbrange_queue: 1024, gossip_bls_to_execution_change_queue: 16384, @@ -891,10 +891,10 @@ impl BeaconProcessor { let mut delayed_block_queue = FifoQueue::new(queue_lengths.delayed_block_queue); let mut status_queue = FifoQueue::new(queue_lengths.status_queue); - let mut bbrange_queue = FifoQueue::new(queue_lengths.bbrange_queue); - let mut bbroots_queue = FifoQueue::new(queue_lengths.bbroots_queue); - let mut blbroots_queue = FifoQueue::new(queue_lengths.blbroots_queue); - let mut blbrange_queue = FifoQueue::new(queue_lengths.blbrange_queue); + let mut block_brange_queue = FifoQueue::new(queue_lengths.block_brange_queue); + let mut block_broots_queue = FifoQueue::new(queue_lengths.block_broots_queue); + let mut blob_broots_queue = FifoQueue::new(queue_lengths.blob_broots_queue); + let mut blob_brange_queue = FifoQueue::new(queue_lengths.blob_brange_queue); let mut dcbroots_queue = FifoQueue::new(queue_lengths.dcbroots_queue); let mut dcbrange_queue = FifoQueue::new(queue_lengths.dcbrange_queue); @@ -1207,13 +1207,13 @@ impl BeaconProcessor { // and BlocksByRoot) } else if let Some(item) = status_queue.pop() { Some(item) - } else if let Some(item) = bbrange_queue.pop() { + } else if let Some(item) = block_brange_queue.pop() { Some(item) - } else if let Some(item) = bbroots_queue.pop() { + } else if let Some(item) = block_broots_queue.pop() { Some(item) - } else if let Some(item) = blbrange_queue.pop() { + } else if let Some(item) = blob_brange_queue.pop() { Some(item) - } else if let Some(item) = blbroots_queue.pop() { + } else if let Some(item) = blob_broots_queue.pop() { Some(item) } else if let Some(item) = dcbroots_queue.pop() { Some(item) @@ -1382,9 +1382,15 @@ impl BeaconProcessor { backfill_chain_segment.push(work, work_id) } Work::Status { .. } => status_queue.push(work, work_id), - Work::BlocksByRangeRequest { .. } => bbrange_queue.push(work, work_id), - Work::BlocksByRootsRequest { .. } => bbroots_queue.push(work, work_id), - Work::BlobsByRangeRequest { .. } => blbrange_queue.push(work, work_id), + Work::BlocksByRangeRequest { .. } => { + block_brange_queue.push(work, work_id) + } + Work::BlocksByRootsRequest { .. } => { + block_broots_queue.push(work, work_id) + } + Work::BlobsByRangeRequest { .. } => { + blob_brange_queue.push(work, work_id) + } Work::LightClientBootstrapRequest { .. } => { lc_bootstrap_queue.push(work, work_id) } @@ -1406,9 +1412,8 @@ impl BeaconProcessor { Work::GossipBlsToExecutionChange { .. } => { gossip_bls_to_execution_change_queue.push(work, work_id) } - Work::BlobsByRootsRequest { .. } => blbroots_queue.push(work, work_id), - Work::ExecutionProofsByRootsRequest { .. } => { - blbroots_queue.push(work, work_id) + Work::BlobsByRootsRequest { .. } => { + blob_broots_queue.push(work, work_id) } Work::DataColumnsByRootsRequest { .. } => { dcbroots_queue.push(work, work_id) @@ -1463,11 +1468,10 @@ impl BeaconProcessor { WorkType::ChainSegment => chain_segment_queue.len(), WorkType::ChainSegmentBackfill => backfill_chain_segment.len(), WorkType::Status => status_queue.len(), - WorkType::BlocksByRangeRequest => blbrange_queue.len(), - WorkType::BlocksByRootsRequest => blbroots_queue.len(), - WorkType::BlobsByRangeRequest => bbrange_queue.len(), - WorkType::BlobsByRootsRequest => bbroots_queue.len(), - WorkType::ExecutionProofsByRootsRequest => bbroots_queue.len(), + WorkType::BlocksByRangeRequest => block_brange_queue.len(), + WorkType::BlocksByRootsRequest => block_broots_queue.len(), + WorkType::BlobsByRangeRequest => blob_brange_queue.len(), + WorkType::BlobsByRootsRequest => blob_broots_queue.len(), WorkType::DataColumnsByRootsRequest => dcbroots_queue.len(), WorkType::DataColumnsByRangeRequest => dcbrange_queue.len(), WorkType::GossipBlsToExecutionChange => { diff --git a/beacon_node/builder_client/src/lib.rs b/beacon_node/builder_client/src/lib.rs index 6b993542f35..b486e77083a 100644 --- a/beacon_node/builder_client/src/lib.rs +++ b/beacon_node/builder_client/src/lib.rs @@ -270,7 +270,7 @@ impl BuilderHttpClient { &self, validator: &[SignedValidatorRegistrationData], ) -> Result<(), Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -289,7 +289,7 @@ impl BuilderHttpClient { &self, blinded_block: &SignedBlindedBeaconBlock, ) -> Result, Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); let body = blinded_block.as_ssz_bytes(); @@ -337,7 +337,7 @@ impl BuilderHttpClient { &self, blinded_block: &SignedBlindedBeaconBlock, ) -> Result<(), Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); let body = blinded_block.as_ssz_bytes(); @@ -387,7 +387,7 @@ impl BuilderHttpClient { &self, blinded_block: &SignedBlindedBeaconBlock, ) -> Result>, Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -430,7 +430,7 @@ impl BuilderHttpClient { &self, blinded_block: &SignedBlindedBeaconBlock, ) -> Result<(), Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -480,7 +480,7 @@ impl BuilderHttpClient { parent_hash: ExecutionBlockHash, pubkey: &PublicKeyBytes, ) -> Result>>, Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -521,7 +521,7 @@ impl BuilderHttpClient { /// `GET /eth/v1/builder/status` pub async fn get_builder_status(&self) -> Result<(), Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? diff --git a/beacon_node/execution_layer/Cargo.toml b/beacon_node/execution_layer/Cargo.toml index f56159c7b55..43b2e1dd751 100644 --- a/beacon_node/execution_layer/Cargo.toml +++ b/beacon_node/execution_layer/Cargo.toml @@ -8,13 +8,13 @@ edition = { workspace = true } alloy-consensus = { workspace = true } alloy-primitives = { workspace = true } alloy-rlp = { workspace = true } +alloy-rpc-types-eth = { workspace = true } arc-swap = "1.6.0" builder_client = { path = "../builder_client" } bytes = { workspace = true } eth2 = { workspace = true } ethereum_serde_utils = { workspace = true } ethereum_ssz = { workspace = true } -ethers-core = { workspace = true } fixed_bytes = { workspace = true } fork_choice = { workspace = true } hash-db = "0.15.2" diff --git a/beacon_node/execution_layer/src/engine_api/http.rs b/beacon_node/execution_layer/src/engine_api/http.rs index a8dbed34cee..8f7564ace6b 100644 --- a/beacon_node/execution_layer/src/engine_api/http.rs +++ b/beacon_node/execution_layer/src/engine_api/http.rs @@ -652,7 +652,7 @@ impl HttpJsonRpc { let mut request = self .client - .post(self.url.full.clone()) + .post(self.url.expose_full().clone()) .timeout(timeout) .header(CONTENT_TYPE, "application/json") .json(&body); diff --git a/beacon_node/execution_layer/src/lib.rs b/beacon_node/execution_layer/src/lib.rs index 4175abf7240..c2a31c2699b 100644 --- a/beacon_node/execution_layer/src/lib.rs +++ b/beacon_node/execution_layer/src/lib.rs @@ -18,7 +18,6 @@ use engines::{Engine, EngineError}; pub use engines::{EngineState, ForkchoiceState}; use eth2::types::{BlobsBundle, FullPayloadContents}; use eth2::types::{ForkVersionedResponse, builder_bid::SignedBuilderBid}; -use ethers_core::types::Transaction as EthersTransaction; use fixed_bytes::UintExtended; use fork_choice::ForkchoiceUpdateParameters; use logging::crit; diff --git a/beacon_node/execution_layer/src/test_utils/execution_block_generator.rs b/beacon_node/execution_layer/src/test_utils/execution_block_generator.rs index 1c1e3074174..7e0033d732c 100644 --- a/beacon_node/execution_layer/src/test_utils/execution_block_generator.rs +++ b/beacon_node/execution_layer/src/test_utils/execution_block_generator.rs @@ -1,4 +1,3 @@ -use crate::EthersTransaction; use crate::engine_api::{ ExecutionBlock, PayloadAttributes, PayloadId, PayloadStatusV1, PayloadStatusV1Status, json_structures::{ @@ -6,6 +5,8 @@ use crate::engine_api::{ }, }; use crate::engines::ForkchoiceState; +use alloy_consensus::TxEnvelope; +use alloy_rpc_types_eth::Transaction as AlloyTransaction; use eth2::types::BlobsBundle; use kzg::{Kzg, KzgCommitment, KzgProof}; use parking_lot::Mutex; @@ -833,7 +834,7 @@ pub fn generate_blobs( pub fn static_valid_tx() -> Result, String> { // This is a real transaction hex encoded, but we don't care about the contents of the transaction. - let transaction: EthersTransaction = serde_json::from_str( + let transaction: AlloyTransaction = serde_json::from_str( r#"{ "blockHash":"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "blockNumber":"0x5daf3b", @@ -852,7 +853,8 @@ pub fn static_valid_tx() -> Result(transaction.into()).to_vec()) .map_err(|e| format!("Failed to convert transaction to SSZ: {:?}", e)) } diff --git a/beacon_node/http_api/src/publish_blocks.rs b/beacon_node/http_api/src/publish_blocks.rs index 05a4a4b7a4a..bfe41c8706c 100644 --- a/beacon_node/http_api/src/publish_blocks.rs +++ b/beacon_node/http_api/src/publish_blocks.rs @@ -25,7 +25,7 @@ use std::sync::Arc; use std::sync::atomic::{AtomicBool, Ordering}; use std::time::Duration; use tokio::sync::mpsc::UnboundedSender; -use tracing::{Span, debug, debug_span, error, info, instrument, warn}; +use tracing::{Span, debug, debug_span, error, field, info, instrument, warn}; use tree_hash::TreeHash; use types::{ AbstractExecPayload, BeaconBlockRef, BlobSidecar, BlobsList, BlockImportSource, @@ -80,7 +80,7 @@ impl ProvenancedBlock> name = SPAN_PUBLISH_BLOCK, level = "info", skip_all, - fields(?block_root, ?validation_level, provenance = tracing::field::Empty) + fields(block_root = field::Empty, ?validation_level, block_slot = field::Empty, provenance = field::Empty) )] pub async fn publish_block>( block_root: Option, @@ -103,12 +103,16 @@ pub async fn publish_block>( } else { "builder" }; - let current_span = Span::current(); - current_span.record("provenance", provenance); let block = unverified_block.inner_block(); + let block_root = block_root.unwrap_or_else(|| block.canonical_root()); + + let current_span = Span::current(); + current_span.record("provenance", provenance); + current_span.record("block_root", field::display(block_root)); + current_span.record("block_slot", field::display(block.slot())); - debug!(slot = %block.slot(), "Signed block received in HTTP API"); + debug!("Signed block received in HTTP API"); /* actually publish a block */ let publish_block_p2p = move |block: Arc>, @@ -152,12 +156,6 @@ pub async fn publish_block>( // Gossip verify the block and blobs/data columns separately. let gossip_verified_block_result = unverified_block.into_gossip_verified_block(&chain); - let block_root = block_root.unwrap_or_else(|| { - gossip_verified_block_result.as_ref().map_or_else( - |_| block.canonical_root(), - |verified_block| verified_block.block_root, - ) - }); let should_publish_block = gossip_verified_block_result.is_ok(); if BroadcastValidation::Gossip == validation_level && should_publish_block { @@ -309,9 +307,8 @@ pub async fn publish_block>( .into_response()) } } - Err(BlockError::DuplicateImportStatusUnknown(root)) => { + Err(BlockError::DuplicateImportStatusUnknown(_)) => { debug!( - block_root = ?root, slot = %block.slot(), "Block previously seen" ); diff --git a/beacon_node/lighthouse_network/Cargo.toml b/beacon_node/lighthouse_network/Cargo.toml index 7e69f6770bf..035452e4b2f 100644 --- a/beacon_node/lighthouse_network/Cargo.toml +++ b/beacon_node/lighthouse_network/Cargo.toml @@ -64,7 +64,6 @@ features = [ "plaintext", "secp256k1", "macros", - "ecdsa", "metrics", "quic", "upnp", diff --git a/beacon_node/network/Cargo.toml b/beacon_node/network/Cargo.toml index 5615148648d..b60c5e6dbff 100644 --- a/beacon_node/network/Cargo.toml +++ b/beacon_node/network/Cargo.toml @@ -19,7 +19,7 @@ async-channel = { workspace = true } beacon_chain = { workspace = true } beacon_processor = { workspace = true } delay_map = { workspace = true } -derivative = { workspace = true } +educe = { workspace = true } ethereum_ssz = { workspace = true } execution_layer = { workspace = true } fnv = { workspace = true } diff --git a/beacon_node/network/src/network_beacon_processor/gossip_methods.rs b/beacon_node/network/src/network_beacon_processor/gossip_methods.rs index bdc0581ce98..c8440a6bbf4 100644 --- a/beacon_node/network/src/network_beacon_processor/gossip_methods.rs +++ b/beacon_node/network/src/network_beacon_processor/gossip_methods.rs @@ -739,12 +739,11 @@ impl NetworkBeaconProcessor { // Data column is available via either the EL or reconstruction. // Do not penalise the peer. // Gossip filter should filter any duplicates received after this. - debug!( - %slot, - %block_root, - %index, - "Received already available column sidecar. Ignoring the column sidecar" - ) + self.propagate_validation_result( + message_id, + peer_id, + MessageAcceptance::Ignore, + ); } GossipDataColumnError::FutureSlot { .. } | GossipDataColumnError::PastFinalizedSlot { .. } => { diff --git a/beacon_node/network/src/network_beacon_processor/mod.rs b/beacon_node/network/src/network_beacon_processor/mod.rs index 09221be93a8..7db2790920e 100644 --- a/beacon_node/network/src/network_beacon_processor/mod.rs +++ b/beacon_node/network/src/network_beacon_processor/mod.rs @@ -934,6 +934,9 @@ impl NetworkBeaconProcessor { "Reconstruction not required for block" ); } + Err(BlockError::DuplicateFullyImported(_)) => { + debug!("Block already imported in parallel with reconstruction"); + } Err(e) => { error!( %block_root, diff --git a/beacon_node/network/src/network_beacon_processor/tests.rs b/beacon_node/network/src/network_beacon_processor/tests.rs index a9794cb5c42..d83059ad278 100644 --- a/beacon_node/network/src/network_beacon_processor/tests.rs +++ b/beacon_node/network/src/network_beacon_processor/tests.rs @@ -916,36 +916,29 @@ async fn data_column_reconstruction_at_deadline() { .start_of(rig.next_block.slot()) .unwrap(); - rig.chain - .slot_clock - .set_current_time(slot_start - rig.chain.spec.maximum_gossip_clock_disparity()); - - assert_eq!( - rig.chain.slot().unwrap(), - rig.next_block.slot() - 1, - "chain should be at the correct slot" - ); - // We push the slot clock to 3 seconds into the slot, this is the deadline to trigger reconstruction. + let slot_duration = rig.chain.slot_clock.slot_duration().as_millis() as u64; + let reconstruction_deadline_millis = + (slot_duration * RECONSTRUCTION_DEADLINE.0) / RECONSTRUCTION_DEADLINE.1; rig.chain .slot_clock - .set_current_time(slot_start + Duration::from_secs(3)); + .set_current_time(slot_start + Duration::from_millis(reconstruction_deadline_millis)); - let num_data_columns = rig.next_data_columns.as_ref().map(|c| c.len()).unwrap_or(0); - for i in 0..num_data_columns { + let min_columns_for_reconstruction = E::number_of_columns() / 2; + for i in 0..min_columns_for_reconstruction { rig.enqueue_gossip_data_columns(i); rig.assert_event_journal_completes(&[WorkType::GossipDataColumnSidecar]) .await; } // Since we're at the reconstruction deadline, reconstruction should be triggered immediately - if num_data_columns > 0 { - rig.assert_event_journal_completes_with_timeout( - &[WorkType::ColumnReconstruction], - Duration::from_millis(50), - ) - .await; - } + rig.assert_event_journal_with_timeout( + &[WorkType::ColumnReconstruction.into()], + Duration::from_millis(50), + false, + false, + ) + .await; } // Test the column reconstruction is delayed for columns that arrive for a previous slot. diff --git a/beacon_node/network/src/sync/batch.rs b/beacon_node/network/src/sync/batch.rs index ea0ef15f4b2..8de386f5be2 100644 --- a/beacon_node/network/src/sync/batch.rs +++ b/beacon_node/network/src/sync/batch.rs @@ -1,5 +1,5 @@ use beacon_chain::block_verification_types::RpcBlock; -use derivative::Derivative; +use educe::Educe; use lighthouse_network::PeerId; use lighthouse_network::rpc::methods::BlocksByRangeRequest; use lighthouse_network::rpc::methods::DataColumnsByRangeRequest; @@ -78,8 +78,8 @@ pub enum BatchProcessingResult { NonFaultyFailure, } -#[derive(Derivative)] -#[derivative(Debug)] +#[derive(Educe)] +#[educe(Debug)] /// A segment of a chain. pub struct BatchInfo { /// Start slot of the batch. @@ -97,7 +97,7 @@ pub struct BatchInfo { /// Whether this batch contains all blocks or all blocks and blobs. batch_type: ByRangeRequestType, /// Pin the generic - #[derivative(Debug = "ignore")] + #[educe(Debug(ignore))] marker: std::marker::PhantomData<(E, B)>, } diff --git a/beacon_node/network/src/sync/block_lookups/single_block_lookup.rs b/beacon_node/network/src/sync/block_lookups/single_block_lookup.rs index 590ebc4763b..46141821bb9 100644 --- a/beacon_node/network/src/sync/block_lookups/single_block_lookup.rs +++ b/beacon_node/network/src/sync/block_lookups/single_block_lookup.rs @@ -5,7 +5,7 @@ use crate::sync::network_context::{ SyncNetworkContext, }; use beacon_chain::{BeaconChainTypes, BlockProcessStatus}; -use derivative::Derivative; +use educe::Educe; use lighthouse_network::service::api_types::Id; use lighthouse_tracing::SPAN_SINGLE_BLOCK_LOOKUP; use parking_lot::RwLock; @@ -57,8 +57,8 @@ pub enum LookupRequestError { }, } -#[derive(Derivative)] -#[derivative(Debug(bound = "T: BeaconChainTypes"))] +#[derive(Educe)] +#[educe(Debug(bound(T: BeaconChainTypes)))] pub struct SingleBlockLookup { pub id: Id, pub block_request_state: BlockRequestState, @@ -68,7 +68,7 @@ pub struct SingleBlockLookup { /// the custody request to have an updated view of the peers that claim to have imported the /// block associated with this lookup. The peer set of a lookup can change rapidly, and faster /// than the lifetime of a custody request. - #[derivative(Debug(format_with = "fmt_peer_set_as_len"))] + #[educe(Debug(method(fmt_peer_set_as_len)))] peers: Arc>>, block_root: Hash256, awaiting_parent: Option, @@ -401,10 +401,10 @@ impl SingleBlockLookup { } /// The state of the blob request component of a `SingleBlockLookup`. -#[derive(Derivative)] -#[derivative(Debug)] +#[derive(Educe)] +#[educe(Debug)] pub struct BlobRequestState { - #[derivative(Debug = "ignore")] + #[educe(Debug(ignore))] pub block_root: Hash256, pub state: SingleLookupRequestState>, } @@ -419,10 +419,10 @@ impl BlobRequestState { } /// The state of the custody request component of a `SingleBlockLookup`. -#[derive(Derivative)] -#[derivative(Debug)] +#[derive(Educe)] +#[educe(Debug)] pub struct CustodyRequestState { - #[derivative(Debug = "ignore")] + #[educe(Debug(ignore))] pub block_root: Hash256, pub state: SingleLookupRequestState>, } @@ -457,10 +457,10 @@ impl ProofRequestState { } /// The state of the block request component of a `SingleBlockLookup`. -#[derive(Derivative)] -#[derivative(Debug)] +#[derive(Educe)] +#[educe(Debug)] pub struct BlockRequestState { - #[derivative(Debug = "ignore")] + #[educe(Debug(ignore))] pub requested_block_root: Hash256, pub state: SingleLookupRequestState>>, } diff --git a/beacon_node/operation_pool/Cargo.toml b/beacon_node/operation_pool/Cargo.toml index beaf8188824..eeddb53c23e 100644 --- a/beacon_node/operation_pool/Cargo.toml +++ b/beacon_node/operation_pool/Cargo.toml @@ -9,7 +9,7 @@ portable = ["beacon_chain/portable"] [dependencies] bitvec = { workspace = true } -derivative = { workspace = true } +educe = { workspace = true } ethereum_ssz = { workspace = true } ethereum_ssz_derive = { workspace = true } itertools = { workspace = true } diff --git a/beacon_node/operation_pool/src/persistence.rs b/beacon_node/operation_pool/src/persistence.rs index 4d754534605..ee45c8dd053 100644 --- a/beacon_node/operation_pool/src/persistence.rs +++ b/beacon_node/operation_pool/src/persistence.rs @@ -3,7 +3,7 @@ use crate::OperationPool; use crate::attestation_storage::AttestationMap; use crate::bls_to_execution_changes::{BlsToExecutionChanges, ReceivedPreCapella}; use crate::sync_aggregate_id::SyncAggregateId; -use derivative::Derivative; +use educe::Educe; use parking_lot::RwLock; use ssz::{Decode, Encode}; use ssz_derive::{Decode, Encode}; @@ -22,10 +22,7 @@ type PersistedSyncContributions = Vec<(SyncAggregateId, Vec Note: the above assumes that the beacon node has no attached validators. If the beacon node has attached validators, then it is required to custody (store) a certain number of data columns which increases with the number of staked ETH. For example, if the staked ETH is `$\geq$` 2048 ETH, then due to custody requirement, it will make the beacon node a semi-supernode ; if `$\geq$` 4096 ETH, the beacon node will be a supernode without needing the flag. +> Note: the above assumes that the beacon node has no attached validators. If the beacon node has attached validators, then it is required to custody (store) a certain number of data columns which increases with the number of staked ETH. For example, if the staked ETH is >= 2048 ETH, then due to custody requirement, it will make the beacon node a semi-supernode ; if >= 4096 ETH, the beacon node will be a supernode without needing the flag. Table below summarizes the role of relevant flags in Lighthouse beacon node: @@ -17,7 +17,7 @@ While both `--supernode` and `--semi-supernode` can serve blobs, a supernode wil Combining `--prune-blobs false` and `--supernode` (or `--semi-supernode`) implies that no data columns will be pruned, and the node will be able to serve blobs since using the flag. -If you want historical blob data beyond the data availability period (18 days), you can backfill blobs or data columns with the experimental flag `--complete-blobs-backfill`. However, do note that this is an experimental feature and it may cause some issues, e.g., the node may block most of its peers. +If you want historical blob data beyond the data availability period (18 days), you can backfill blobs or data columns with the experimental flag `--complete-blob-backfill`. However, do note that this is an experimental feature and it only works when the flag is present during a fresh checkpoint sync when the database is initialised. The flag will have no effect if the node is already running (with an existing database). During blob backfill, the feature may cause some issues, e.g., the node may block most of its peers. **⚠️ The following section on Blobs is archived and not maintained as blobs are stored in the form of data columns after the Fulu fork ⚠️** diff --git a/book/src/advanced_database_migrations.md b/book/src/advanced_database_migrations.md index 3552a90b0e8..115a8858780 100644 --- a/book/src/advanced_database_migrations.md +++ b/book/src/advanced_database_migrations.md @@ -17,6 +17,7 @@ validator client or the slasher**. | Lighthouse version | Release date | Schema version | Downgrade available? | |--------------------|--------------|----------------|----------------------| +| v8.0.0 | Nov 2025 | v28 | yes before Fulu | | v8.0.0-rc.0 | Sep 2025 | v28 | yes before Fulu | | v7.1.0 | Jul 2025 | v26 | yes | | v7.0.0 | Apr 2025 | v22 | no | diff --git a/book/src/advanced_proposer_only.md b/book/src/advanced_proposer_only.md index f55e51606cf..1ef7a066559 100644 --- a/book/src/advanced_proposer_only.md +++ b/book/src/advanced_proposer_only.md @@ -23,9 +23,7 @@ normal activities such as performing attestations, but it will make the node harder to identify as a potential node to attack and will also consume less resources. -Specifically, this flag reduces the default peer count (to a safe minimal -number as maintaining peers on attestation subnets do not need to be considered), -prevents the node from subscribing to any attestation-subnets or +Specifically, this flag prevents the node from subscribing to any attestation-subnets or sync-committees which is a primary way for attackers to de-anonymize validators. diff --git a/common/deposit_contract/Cargo.toml b/common/deposit_contract/Cargo.toml index 767f67b853f..dfaad43719d 100644 --- a/common/deposit_contract/Cargo.toml +++ b/common/deposit_contract/Cargo.toml @@ -7,8 +7,11 @@ edition = { workspace = true } build = "build.rs" [dependencies] -ethabi = "16.0.0" +alloy-dyn-abi = "1.4" +alloy-json-abi = "1.4" +alloy-primitives = { workspace = true } ethereum_ssz = { workspace = true } +serde_json = { workspace = true } tree_hash = { workspace = true } types = { workspace = true } diff --git a/common/deposit_contract/src/lib.rs b/common/deposit_contract/src/lib.rs index 7d58240f11b..12c3bdaa894 100644 --- a/common/deposit_contract/src/lib.rs +++ b/common/deposit_contract/src/lib.rs @@ -1,23 +1,44 @@ -use ethabi::{Contract, Token}; +use alloy_dyn_abi::{DynSolValue, JsonAbiExt}; +use alloy_json_abi::JsonAbi; +use alloy_primitives::FixedBytes; use ssz::{Decode, DecodeError as SszDecodeError, Encode}; use tree_hash::TreeHash; use types::{DepositData, Hash256, PublicKeyBytes, SignatureBytes}; -pub use ethabi::Error; - #[derive(Debug)] -pub enum DecodeError { - EthabiError(ethabi::Error), +pub enum Error { + AlloyCoreError(alloy_json_abi::Error), + SerdeJsonError(serde_json::Error), + DynAbiError(alloy_dyn_abi::Error), SszDecodeError(SszDecodeError), + FunctionNotFound, MissingField, UnableToGetBytes, MissingToken, InadequateBytes, } -impl From for DecodeError { - fn from(e: ethabi::Error) -> DecodeError { - DecodeError::EthabiError(e) +impl From for Error { + fn from(e: alloy_json_abi::Error) -> Error { + Error::AlloyCoreError(e) + } +} + +impl From for Error { + fn from(e: serde_json::Error) -> Error { + Error::SerdeJsonError(e) + } +} + +impl From for Error { + fn from(e: alloy_dyn_abi::Error) -> Error { + Error::DynAbiError(e) + } +} + +impl From for Error { + fn from(e: SszDecodeError) -> Error { + Error::SszDecodeError(e) } } @@ -36,47 +57,57 @@ pub mod testnet { pub fn encode_eth1_tx_data(deposit_data: &DepositData) -> Result, Error> { let params = vec![ - Token::Bytes(deposit_data.pubkey.as_ssz_bytes()), - Token::Bytes(deposit_data.withdrawal_credentials.as_ssz_bytes()), - Token::Bytes(deposit_data.signature.as_ssz_bytes()), - Token::FixedBytes(deposit_data.tree_hash_root().as_ssz_bytes()), + DynSolValue::Bytes(deposit_data.pubkey.as_ssz_bytes()), + DynSolValue::Bytes(deposit_data.withdrawal_credentials.as_ssz_bytes()), + DynSolValue::Bytes(deposit_data.signature.as_ssz_bytes()), + DynSolValue::FixedBytes( + FixedBytes::<32>::from_slice(&deposit_data.tree_hash_root().as_ssz_bytes()), + 32, + ), ]; // Here we make an assumption that the `crate::testnet::ABI` has a superset of the features of // the crate::ABI`. - let abi = Contract::load(ABI)?; - let function = abi.function("deposit")?; - function.encode_input(¶ms) + let abi: JsonAbi = serde_json::from_slice(ABI)?; + let function = abi + .function("deposit") + .and_then(|functions| functions.first()) + .ok_or(Error::FunctionNotFound)?; + + function + .abi_encode_input(¶ms) + .map_err(Error::DynAbiError) } -pub fn decode_eth1_tx_data( - bytes: &[u8], - amount: u64, -) -> Result<(DepositData, Hash256), DecodeError> { - let abi = Contract::load(ABI)?; - let function = abi.function("deposit")?; - let mut tokens = function.decode_input(bytes.get(4..).ok_or(DecodeError::InadequateBytes)?)?; +pub fn decode_eth1_tx_data(bytes: &[u8], amount: u64) -> Result<(DepositData, Hash256), Error> { + let abi: JsonAbi = serde_json::from_slice(ABI)?; + let function = abi + .function("deposit") + .and_then(|functions| functions.first()) + .ok_or(Error::FunctionNotFound)?; + + let input_data = bytes.get(4..).ok_or(Error::InadequateBytes)?; + let mut tokens = function.abi_decode_input(input_data)?; macro_rules! decode_token { - ($type: ty, $to_fn: ident) => { - <$type>::from_ssz_bytes( - &tokens - .pop() - .ok_or_else(|| DecodeError::MissingToken)? - .$to_fn() - .ok_or_else(|| DecodeError::UnableToGetBytes)?, - ) - .map_err(DecodeError::SszDecodeError)? - }; + ($type: ty) => {{ + let token = tokens.pop().ok_or(Error::MissingToken)?; + let bytes_data = match token { + DynSolValue::Bytes(b) => b, + DynSolValue::FixedBytes(b, _) => b.to_vec(), + _ => return Err(Error::UnableToGetBytes), + }; + <$type>::from_ssz_bytes(&bytes_data)? + }}; } - let root = decode_token!(Hash256, into_fixed_bytes); + let root = decode_token!(Hash256); let deposit_data = DepositData { amount, - signature: decode_token!(SignatureBytes, into_bytes), - withdrawal_credentials: decode_token!(Hash256, into_bytes), - pubkey: decode_token!(PublicKeyBytes, into_bytes), + signature: decode_token!(SignatureBytes), + withdrawal_credentials: decode_token!(Hash256), + pubkey: decode_token!(PublicKeyBytes), }; Ok((deposit_data, root)) diff --git a/common/eth2/Cargo.toml b/common/eth2/Cargo.toml index 46066a559f8..906fcd7b5c3 100644 --- a/common/eth2/Cargo.toml +++ b/common/eth2/Cargo.toml @@ -9,7 +9,7 @@ default = ["lighthouse"] lighthouse = [] [dependencies] -derivative = { workspace = true } +educe = { workspace = true } eip_3076 = { workspace = true } either = { workspace = true } enr = { version = "0.13.0", features = ["ed25519"] } diff --git a/common/eth2/src/lib.rs b/common/eth2/src/lib.rs index 2641a4c02e0..bcd979daca6 100644 --- a/common/eth2/src/lib.rs +++ b/common/eth2/src/lib.rs @@ -19,7 +19,7 @@ pub use self::error::{Error, ok_or_error, success_or_error}; use self::mixin::{RequestAccept, ResponseOptional}; use self::types::*; use ::types::beacon_response::ExecutionOptimisticFinalizedBeaconResponse; -use derivative::Derivative; +use educe::Educe; use futures::Stream; use futures_util::StreamExt; use libp2p_identity::PeerId; @@ -30,7 +30,7 @@ use reqwest::{ }; pub use reqwest::{StatusCode, Url}; use reqwest_eventsource::{Event, EventSource}; -pub use sensitive_url::{SensitiveError, SensitiveUrl}; +pub use sensitive_url::SensitiveUrl; use serde::{Serialize, de::DeserializeOwned}; use ssz::Encode; use std::fmt; @@ -135,10 +135,10 @@ impl Timeouts { /// A wrapper around `reqwest::Client` which provides convenience methods for interfacing with a /// Lighthouse Beacon Node HTTP server (`http_api`). -#[derive(Clone, Debug, Derivative)] -#[derivative(PartialEq)] +#[derive(Clone, Debug, Educe)] +#[educe(PartialEq)] pub struct BeaconNodeHttpClient { - #[derivative(PartialEq = "ignore")] + #[educe(PartialEq(ignore))] client: reqwest::Client, server: SensitiveUrl, timeouts: Timeouts, @@ -152,12 +152,6 @@ impl fmt::Display for BeaconNodeHttpClient { } } -impl AsRef for BeaconNodeHttpClient { - fn as_ref(&self) -> &str { - self.server.as_ref() - } -} - impl BeaconNodeHttpClient { pub fn new(server: SensitiveUrl, timeouts: Timeouts) -> Self { Self { @@ -178,10 +172,14 @@ impl BeaconNodeHttpClient { timeouts, } } + // Returns a reference to the `SensitiveUrl` of the server. + pub fn server(&self) -> &SensitiveUrl { + &self.server + } /// Return the path with the standard `/eth/vX` prefix applied. fn eth_path(&self, version: EndpointVersion) -> Result { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -2613,7 +2611,7 @@ impl BeaconNodeHttpClient { ids: &[u64], epoch: Epoch, ) -> Result>, Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? diff --git a/common/eth2/src/lighthouse.rs b/common/eth2/src/lighthouse.rs index 4f9a049e44e..993c263cbfb 100644 --- a/common/eth2/src/lighthouse.rs +++ b/common/eth2/src/lighthouse.rs @@ -173,7 +173,7 @@ pub struct DepositLog { impl BeaconNodeHttpClient { /// `GET lighthouse/health` pub async fn get_lighthouse_health(&self) -> Result, Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -185,7 +185,7 @@ impl BeaconNodeHttpClient { /// `GET lighthouse/syncing` pub async fn get_lighthouse_syncing(&self) -> Result, Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -197,7 +197,7 @@ impl BeaconNodeHttpClient { /// `GET lighthouse/custody/info` pub async fn get_lighthouse_custody_info(&self) -> Result { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -210,7 +210,7 @@ impl BeaconNodeHttpClient { /// `POST lighthouse/custody/backfill` pub async fn post_lighthouse_custody_backfill(&self) -> Result<(), Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -231,7 +231,7 @@ impl BeaconNodeHttpClient { /// `GET lighthouse/proto_array` pub async fn get_lighthouse_proto_array(&self) -> Result, Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -246,7 +246,7 @@ impl BeaconNodeHttpClient { &self, epoch: Epoch, ) -> Result, Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -264,7 +264,7 @@ impl BeaconNodeHttpClient { epoch: Epoch, validator_id: ValidatorId, ) -> Result>, Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -278,7 +278,7 @@ impl BeaconNodeHttpClient { /// `POST lighthouse/database/reconstruct` pub async fn post_lighthouse_database_reconstruct(&self) -> Result { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -291,7 +291,7 @@ impl BeaconNodeHttpClient { /// `POST lighthouse/add_peer` pub async fn post_lighthouse_add_peer(&self, req: AdminPeer) -> Result<(), Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -303,7 +303,7 @@ impl BeaconNodeHttpClient { /// `POST lighthouse/remove_peer` pub async fn post_lighthouse_remove_peer(&self, req: AdminPeer) -> Result<(), Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -323,7 +323,7 @@ impl BeaconNodeHttpClient { start_slot: Slot, end_slot: Slot, ) -> Result, Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -344,7 +344,7 @@ impl BeaconNodeHttpClient { start_epoch: Epoch, end_epoch: Epoch, ) -> Result, Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -366,7 +366,7 @@ impl BeaconNodeHttpClient { end_epoch: Epoch, target: String, ) -> Result, Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? diff --git a/common/eth2/src/lighthouse_vc/http_client.rs b/common/eth2/src/lighthouse_vc/http_client.rs index c4fddb97d7a..8c9d3397a8c 100644 --- a/common/eth2/src/lighthouse_vc/http_client.rs +++ b/common/eth2/src/lighthouse_vc/http_client.rs @@ -283,7 +283,7 @@ impl ValidatorClientHttpClient { /// `GET lighthouse/version` pub async fn get_lighthouse_version(&self) -> Result, Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -295,7 +295,7 @@ impl ValidatorClientHttpClient { /// `GET lighthouse/health` pub async fn get_lighthouse_health(&self) -> Result, Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -309,7 +309,7 @@ impl ValidatorClientHttpClient { pub async fn get_lighthouse_spec( &self, ) -> Result, Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -323,7 +323,7 @@ impl ValidatorClientHttpClient { pub async fn get_lighthouse_validators( &self, ) -> Result>, Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -338,7 +338,7 @@ impl ValidatorClientHttpClient { &self, validator_pubkey: &PublicKeyBytes, ) -> Result>, Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -354,7 +354,7 @@ impl ValidatorClientHttpClient { &self, validators: Vec, ) -> Result, Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -369,7 +369,7 @@ impl ValidatorClientHttpClient { &self, request: &CreateValidatorsMnemonicRequest, ) -> Result>, Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -385,7 +385,7 @@ impl ValidatorClientHttpClient { &self, request: &KeystoreValidatorsPostRequest, ) -> Result, Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -401,7 +401,7 @@ impl ValidatorClientHttpClient { &self, request: &[Web3SignerValidatorRequest], ) -> Result<(), Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -424,7 +424,7 @@ impl ValidatorClientHttpClient { prefer_builder_proposals: Option, graffiti: Option, ) -> Result<(), Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -451,7 +451,7 @@ impl ValidatorClientHttpClient { &self, req: &DeleteKeystoresRequest, ) -> Result { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? @@ -462,7 +462,7 @@ impl ValidatorClientHttpClient { } fn make_keystores_url(&self) -> Result { - let mut url = self.server.full.clone(); + let mut url = self.server.expose_full().clone(); url.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? .push("eth") @@ -472,7 +472,7 @@ impl ValidatorClientHttpClient { } fn make_remotekeys_url(&self) -> Result { - let mut url = self.server.full.clone(); + let mut url = self.server.expose_full().clone(); url.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? .push("eth") @@ -482,7 +482,7 @@ impl ValidatorClientHttpClient { } fn make_fee_recipient_url(&self, pubkey: &PublicKeyBytes) -> Result { - let mut url = self.server.full.clone(); + let mut url = self.server.expose_full().clone(); url.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? .push("eth") @@ -494,7 +494,7 @@ impl ValidatorClientHttpClient { } fn make_graffiti_url(&self, pubkey: &PublicKeyBytes) -> Result { - let mut url = self.server.full.clone(); + let mut url = self.server.expose_full().clone(); url.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? .push("eth") @@ -506,7 +506,7 @@ impl ValidatorClientHttpClient { } fn make_gas_limit_url(&self, pubkey: &PublicKeyBytes) -> Result { - let mut url = self.server.full.clone(); + let mut url = self.server.expose_full().clone(); url.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? .push("eth") @@ -519,7 +519,7 @@ impl ValidatorClientHttpClient { /// `GET lighthouse/auth` pub async fn get_auth(&self) -> Result { - let mut url = self.server.full.clone(); + let mut url = self.server.expose_full().clone(); url.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? .push("lighthouse") @@ -635,7 +635,7 @@ impl ValidatorClientHttpClient { pubkey: &PublicKeyBytes, epoch: Option, ) -> Result, Error> { - let mut path = self.server.full.clone(); + let mut path = self.server.expose_full().clone(); path.path_segments_mut() .map_err(|()| Error::InvalidUrl(self.server.clone()))? diff --git a/common/monitoring_api/src/lib.rs b/common/monitoring_api/src/lib.rs index 465618c9a82..03b93f2faae 100644 --- a/common/monitoring_api/src/lib.rs +++ b/common/monitoring_api/src/lib.rs @@ -195,7 +195,7 @@ impl MonitoringHttpClient { endpoint = %self.monitoring_endpoint, "Sending metrics to remote endpoint" ); - self.post(self.monitoring_endpoint.full.clone(), &metrics) + self.post(self.monitoring_endpoint.expose_full().clone(), &metrics) .await } } diff --git a/common/sensitive_url/Cargo.toml b/common/sensitive_url/Cargo.toml deleted file mode 100644 index ff562097225..00000000000 --- a/common/sensitive_url/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "sensitive_url" -version = "0.1.0" -authors = ["Mac L "] -edition = { workspace = true } -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -serde = { workspace = true } -url = { workspace = true } diff --git a/common/sensitive_url/src/lib.rs b/common/sensitive_url/src/lib.rs deleted file mode 100644 index 64ad070a1fd..00000000000 --- a/common/sensitive_url/src/lib.rs +++ /dev/null @@ -1,120 +0,0 @@ -use serde::{Deserialize, Deserializer, Serialize, Serializer, de}; -use std::fmt; -use std::str::FromStr; -use url::Url; - -#[derive(Debug)] -pub enum SensitiveError { - InvalidUrl(String), - ParseError(url::ParseError), - RedactError(String), -} - -impl fmt::Display for SensitiveError { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{:?}", self) - } -} - -// Wrapper around Url which provides a custom `Display` implementation to protect user secrets. -#[derive(Clone, PartialEq)] -pub struct SensitiveUrl { - pub full: Url, - pub redacted: String, -} - -impl fmt::Display for SensitiveUrl { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - self.redacted.fmt(f) - } -} - -impl fmt::Debug for SensitiveUrl { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - self.redacted.fmt(f) - } -} - -impl AsRef for SensitiveUrl { - fn as_ref(&self) -> &str { - self.redacted.as_str() - } -} - -impl Serialize for SensitiveUrl { - fn serialize(&self, serializer: S) -> Result - where - S: Serializer, - { - serializer.serialize_str(self.full.as_ref()) - } -} - -impl<'de> Deserialize<'de> for SensitiveUrl { - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - let s: String = Deserialize::deserialize(deserializer)?; - SensitiveUrl::parse(&s) - .map_err(|e| de::Error::custom(format!("Failed to deserialize sensitive URL {:?}", e))) - } -} - -impl FromStr for SensitiveUrl { - type Err = SensitiveError; - - fn from_str(s: &str) -> Result { - Self::parse(s) - } -} - -impl SensitiveUrl { - pub fn parse(url: &str) -> Result { - let surl = Url::parse(url).map_err(SensitiveError::ParseError)?; - SensitiveUrl::new(surl) - } - - pub fn new(full: Url) -> Result { - let mut redacted = full.clone(); - redacted - .path_segments_mut() - .map_err(|_| SensitiveError::InvalidUrl("URL cannot be a base.".to_string()))? - .clear(); - redacted.set_query(None); - - if redacted.has_authority() { - redacted.set_username("").map_err(|_| { - SensitiveError::RedactError("Unable to redact username.".to_string()) - })?; - redacted.set_password(None).map_err(|_| { - SensitiveError::RedactError("Unable to redact password.".to_string()) - })?; - } - - Ok(Self { - full, - redacted: redacted.to_string(), - }) - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn redact_remote_url() { - let full = "https://project:secret@example.com/example?somequery"; - let surl = SensitiveUrl::parse(full).unwrap(); - assert_eq!(surl.to_string(), "https://example.com/"); - assert_eq!(surl.full.to_string(), full); - } - #[test] - fn redact_localhost_url() { - let full = "http://localhost:5052/"; - let surl = SensitiveUrl::parse(full).unwrap(); - assert_eq!(surl.to_string(), "http://localhost:5052/"); - assert_eq!(surl.full.to_string(), full); - } -} diff --git a/common/validator_dir/Cargo.toml b/common/validator_dir/Cargo.toml index 4c03b7662ed..a5b373fcae9 100644 --- a/common/validator_dir/Cargo.toml +++ b/common/validator_dir/Cargo.toml @@ -11,7 +11,7 @@ insecure_keys = [] [dependencies] bls = { workspace = true } deposit_contract = { workspace = true } -derivative = { workspace = true } +educe = { workspace = true } eth2_keystore = { workspace = true } filesystem = { workspace = true } hex = { workspace = true } diff --git a/common/validator_dir/src/validator_dir.rs b/common/validator_dir/src/validator_dir.rs index 0ed28c4ddc2..8b50ea66876 100644 --- a/common/validator_dir/src/validator_dir.rs +++ b/common/validator_dir/src/validator_dir.rs @@ -3,7 +3,7 @@ use crate::builder::{ WITHDRAWAL_KEYSTORE_FILE, keystore_password_path, }; use deposit_contract::decode_eth1_tx_data; -use derivative::Derivative; +use educe::Educe; use eth2_keystore::{Error as KeystoreError, Keystore, PlainText}; use lockfile::{Lockfile, LockfileError}; use std::fs::{File, read, write}; @@ -32,7 +32,7 @@ pub enum Error { UnableToReadDepositAmount(io::Error), UnableToParseDepositAmount(std::num::ParseIntError), DepositAmountIsNotUtf8(std::string::FromUtf8Error), - UnableToParseDepositData(deposit_contract::DecodeError), + UnableToParseDepositData(deposit_contract::Error), Eth1TxHashExists(PathBuf), UnableToWriteEth1TxHash(io::Error), /// The deposit root in the deposit data file does not match the one generated locally. This is @@ -56,11 +56,11 @@ pub struct Eth1DepositData { /// /// Holds a lockfile in `self.dir` to attempt to prevent concurrent access from multiple /// processes. -#[derive(Debug, Derivative)] -#[derivative(PartialEq)] +#[derive(Debug, Educe)] +#[educe(PartialEq)] pub struct ValidatorDir { dir: PathBuf, - #[derivative(PartialEq = "ignore")] + #[educe(PartialEq(ignore))] _lockfile: Lockfile, } diff --git a/consensus/state_processing/Cargo.toml b/consensus/state_processing/Cargo.toml index fc55bde9c67..3821aa16891 100644 --- a/consensus/state_processing/Cargo.toml +++ b/consensus/state_processing/Cargo.toml @@ -20,7 +20,7 @@ portable = ["bls/supranational-portable"] [dependencies] arbitrary = { workspace = true } bls = { workspace = true } -derivative = { workspace = true } +educe = { workspace = true } ethereum_hashing = { workspace = true } ethereum_ssz = { workspace = true } ethereum_ssz_derive = { workspace = true } diff --git a/consensus/state_processing/src/verify_operation.rs b/consensus/state_processing/src/verify_operation.rs index a922e47cfef..1f76f19586f 100644 --- a/consensus/state_processing/src/verify_operation.rs +++ b/consensus/state_processing/src/verify_operation.rs @@ -8,7 +8,7 @@ use crate::per_block_processing::{ verify_proposer_slashing, }; use arbitrary::Arbitrary; -use derivative::Derivative; +use educe::Educe; use smallvec::{SmallVec, smallvec}; use ssz::{Decode, Encode}; use ssz_derive::{Decode, Encode}; @@ -39,11 +39,11 @@ pub trait TransformPersist { /// /// The inner `op` field is private, meaning instances of this type can only be constructed /// by calling `validate`. -#[derive(Derivative, Debug, Clone, Arbitrary)] -#[derivative( +#[derive(Educe, Debug, Clone, Arbitrary)] +#[educe( PartialEq, Eq, - Hash(bound = "T: TransformPersist + std::hash::Hash, E: EthSpec") + Hash(bound(T: TransformPersist + std::hash::Hash, E: EthSpec)) )] #[arbitrary(bound = "T: TransformPersist + Arbitrary<'arbitrary>, E: EthSpec")] pub struct SigVerifiedOp { diff --git a/consensus/types/Cargo.toml b/consensus/types/Cargo.toml index d9b2f101987..1f527c0de8a 100644 --- a/consensus/types/Cargo.toml +++ b/consensus/types/Cargo.toml @@ -25,12 +25,12 @@ portable = ["bls/supranational-portable"] [dependencies] alloy-primitives = { workspace = true } -alloy-rlp = { version = "0.3.4", features = ["derive"] } +alloy-rlp = { workspace = true, features = ["derive"] } arbitrary = { workspace = true, features = ["derive"], optional = true } bls = { workspace = true } compare_fields = { workspace = true } context_deserialize = { workspace = true } -derivative = { workspace = true } +educe = { workspace = true } eth2_interop_keypairs = { path = "../../common/eth2_interop_keypairs" } ethereum_hashing = { workspace = true } ethereum_serde_utils = { workspace = true } diff --git a/consensus/types/src/attestation.rs b/consensus/types/src/attestation.rs index 52646867925..14305826589 100644 --- a/consensus/types/src/attestation.rs +++ b/consensus/types/src/attestation.rs @@ -8,7 +8,7 @@ use crate::{ }; use crate::{Hash256, Slot, test_utils::TestRandom}; use crate::{IndexedAttestation, context_deserialize}; -use derivative::Derivative; +use educe::Educe; use serde::{Deserialize, Deserializer, Serialize}; use ssz_derive::{Decode, Encode}; use ssz_types::BitVector; @@ -45,11 +45,11 @@ impl From for Error { Decode, Encode, TestRandom, - Derivative, + Educe, TreeHash, ), context_deserialize(ForkName), - derivative(PartialEq, Hash(bound = "E: EthSpec")), + educe(PartialEq, Hash(bound(E: EthSpec))), serde(bound = "E: EthSpec", deny_unknown_fields), cfg_attr( feature = "arbitrary", @@ -66,7 +66,8 @@ impl From for Error { derive(arbitrary::Arbitrary), arbitrary(bound = "E: EthSpec") )] -#[derive(Debug, Clone, Serialize, TreeHash, Encode, Derivative, Deserialize, PartialEq)] +#[derive(Debug, Clone, Serialize, TreeHash, Encode, Educe, Deserialize)] +#[educe(PartialEq)] #[serde(untagged)] #[tree_hash(enum_behaviour = "transparent")] #[ssz(enum_behaviour = "transparent")] @@ -599,18 +600,7 @@ impl<'de, E: EthSpec> ContextDeserialize<'de, ForkName> for Vec> */ #[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))] -#[derive( - Debug, - Clone, - Serialize, - Deserialize, - Decode, - Encode, - TestRandom, - Derivative, - TreeHash, - PartialEq, -)] +#[derive(Debug, Clone, Serialize, Deserialize, Decode, Encode, TestRandom, TreeHash, PartialEq)] #[context_deserialize(ForkName)] pub struct SingleAttestation { #[serde(with = "serde_utils::quoted_u64")] diff --git a/consensus/types/src/attester_slashing.rs b/consensus/types/src/attester_slashing.rs index adc3695f4a4..2bfb65653c6 100644 --- a/consensus/types/src/attester_slashing.rs +++ b/consensus/types/src/attester_slashing.rs @@ -4,7 +4,7 @@ use crate::indexed_attestation::{ }; use crate::{ContextDeserialize, ForkName}; use crate::{EthSpec, test_utils::TestRandom}; -use derivative::Derivative; +use educe::Educe; use rand::{Rng, RngCore}; use serde::{Deserialize, Deserializer, Serialize}; use ssz_derive::{Decode, Encode}; @@ -16,7 +16,7 @@ use tree_hash_derive::TreeHash; variants(Base, Electra), variant_attributes( derive( - Derivative, + Educe, Debug, Clone, Serialize, @@ -27,7 +27,7 @@ use tree_hash_derive::TreeHash; TestRandom, ), context_deserialize(ForkName), - derivative(PartialEq, Eq, Hash(bound = "E: EthSpec")), + educe(PartialEq, Eq, Hash(bound(E: EthSpec))), serde(bound = "E: EthSpec"), cfg_attr( feature = "arbitrary", @@ -42,8 +42,8 @@ use tree_hash_derive::TreeHash; derive(arbitrary::Arbitrary), arbitrary(bound = "E: EthSpec") )] -#[derive(Debug, Clone, Serialize, Encode, Deserialize, TreeHash, Derivative)] -#[derivative(PartialEq, Eq, Hash(bound = "E: EthSpec"))] +#[derive(Debug, Clone, Serialize, Encode, Deserialize, TreeHash, Educe)] +#[educe(PartialEq, Eq, Hash(bound(E: EthSpec)))] #[serde(bound = "E: EthSpec", untagged)] #[ssz(enum_behaviour = "transparent")] #[tree_hash(enum_behaviour = "transparent")] @@ -57,8 +57,8 @@ pub struct AttesterSlashing { /// This is a copy of the `AttesterSlashing` enum but with `Encode` and `Decode` derived /// using the `union` behavior for the purposes of persistence on disk. We use a separate /// type so that we don't accidentally use this non-spec encoding in consensus objects. -#[derive(Debug, Clone, Encode, Decode, Derivative)] -#[derivative(PartialEq, Eq, Hash(bound = "E: EthSpec"))] +#[derive(Debug, Clone, Encode, Decode, Educe)] +#[educe(PartialEq, Eq, Hash(bound(E: EthSpec)))] #[ssz(enum_behaviour = "union")] pub enum AttesterSlashingOnDisk { Base(AttesterSlashingBase), diff --git a/consensus/types/src/beacon_block.rs b/consensus/types/src/beacon_block.rs index 61c32dd4ac9..060709d6556 100644 --- a/consensus/types/src/beacon_block.rs +++ b/consensus/types/src/beacon_block.rs @@ -1,7 +1,7 @@ use crate::attestation::AttestationBase; use crate::test_utils::TestRandom; use crate::*; -use derivative::Derivative; +use educe::Educe; use serde::{Deserialize, Deserializer, Serialize}; use ssz::{Decode, DecodeError}; use ssz_derive::{Decode, Encode}; @@ -27,9 +27,9 @@ use self::indexed_attestation::IndexedAttestationBase; Decode, TreeHash, TestRandom, - Derivative, + Educe, ), - derivative(PartialEq, Hash(bound = "E: EthSpec, Payload: AbstractExecPayload")), + educe(PartialEq, Hash(bound(E: EthSpec, Payload: AbstractExecPayload))), serde( bound = "E: EthSpec, Payload: AbstractExecPayload", deny_unknown_fields @@ -52,8 +52,8 @@ use self::indexed_attestation::IndexedAttestationBase; derive(arbitrary::Arbitrary), arbitrary(bound = "E: EthSpec, Payload: AbstractExecPayload") )] -#[derive(Debug, Clone, Serialize, Deserialize, Encode, TreeHash, Derivative)] -#[derivative(PartialEq, Hash(bound = "E: EthSpec"))] +#[derive(Debug, Clone, Serialize, Deserialize, Encode, TreeHash, Educe)] +#[educe(PartialEq, Hash(bound(E: EthSpec)))] #[serde(untagged)] #[serde(bound = "E: EthSpec, Payload: AbstractExecPayload")] #[tree_hash(enum_behaviour = "transparent")] diff --git a/consensus/types/src/beacon_block_body.rs b/consensus/types/src/beacon_block_body.rs index e636fbb5346..ced8fea4a99 100644 --- a/consensus/types/src/beacon_block_body.rs +++ b/consensus/types/src/beacon_block_body.rs @@ -1,6 +1,6 @@ use crate::test_utils::TestRandom; use crate::*; -use derivative::Derivative; +use educe::Educe; use merkle_proof::{MerkleTree, MerkleTreeError}; use metastruct::metastruct; use serde::{Deserialize, Deserializer, Serialize}; @@ -39,9 +39,9 @@ pub const BLOB_KZG_COMMITMENTS_INDEX: usize = 11; Decode, TreeHash, TestRandom, - Derivative, + Educe, ), - derivative(PartialEq, Hash(bound = "E: EthSpec, Payload: AbstractExecPayload")), + educe(PartialEq, Hash(bound(E: EthSpec, Payload: AbstractExecPayload))), serde( bound = "E: EthSpec, Payload: AbstractExecPayload", deny_unknown_fields @@ -71,8 +71,8 @@ pub const BLOB_KZG_COMMITMENTS_INDEX: usize = 11; derive(arbitrary::Arbitrary), arbitrary(bound = "E: EthSpec, Payload: AbstractExecPayload") )] -#[derive(Debug, Clone, Serialize, Deserialize, Derivative, TreeHash)] -#[derivative(PartialEq, Hash(bound = "E: EthSpec"))] +#[derive(Debug, Clone, Serialize, Deserialize, Educe, TreeHash)] +#[educe(PartialEq, Hash(bound(E: EthSpec)))] #[serde(untagged)] #[serde(bound = "E: EthSpec, Payload: AbstractExecPayload")] #[tree_hash(enum_behaviour = "transparent")] diff --git a/consensus/types/src/beacon_state.rs b/consensus/types/src/beacon_state.rs index d1574be7cc1..d13e2235574 100644 --- a/consensus/types/src/beacon_state.rs +++ b/consensus/types/src/beacon_state.rs @@ -5,7 +5,7 @@ use crate::historical_summary::HistoricalSummary; use crate::test_utils::TestRandom; use crate::*; use compare_fields::CompareFields; -use derivative::Derivative; +use educe::Educe; use ethereum_hashing::hash; use int_to_bytes::{int_to_bytes4, int_to_bytes8}; use metastruct::{NumFields, metastruct}; @@ -245,7 +245,7 @@ impl From for Hash256 { variants(Base, Altair, Bellatrix, Capella, Deneb, Electra, Fulu, Gloas), variant_attributes( derive( - Derivative, + Educe, Debug, PartialEq, Serialize, @@ -262,7 +262,7 @@ impl From for Hash256 { derive(arbitrary::Arbitrary), arbitrary(bound = "E: EthSpec") ), - derivative(Clone), + educe(Clone), ), specific_variant_attributes( Base(metastruct( diff --git a/consensus/types/src/beacon_state/committee_cache.rs b/consensus/types/src/beacon_state/committee_cache.rs index 06242e8d20e..408c269da5f 100644 --- a/consensus/types/src/beacon_state/committee_cache.rs +++ b/consensus/types/src/beacon_state/committee_cache.rs @@ -2,7 +2,7 @@ use crate::*; use core::num::NonZeroUsize; -use derivative::Derivative; +use educe::Educe; use safe_arith::SafeArith; use serde::{Deserialize, Serialize}; use ssz::{Decode, DecodeError, Encode, four_byte_option_impl}; @@ -20,13 +20,13 @@ four_byte_option_impl!(four_byte_option_non_zero_usize, NonZeroUsize); /// Computes and stores the shuffling for an epoch. Provides various getters to allow callers to /// read the committees for the given epoch. -#[derive(Derivative, Debug, Default, Clone, Serialize, Deserialize, Encode, Decode)] -#[derivative(PartialEq)] +#[derive(Educe, Debug, Default, Clone, Serialize, Deserialize, Encode, Decode)] +#[educe(PartialEq)] pub struct CommitteeCache { #[ssz(with = "four_byte_option_epoch")] initialized_epoch: Option, shuffling: Vec, - #[derivative(PartialEq(compare_with = "compare_shuffling_positions"))] + #[educe(PartialEq(method(compare_shuffling_positions)))] shuffling_positions: Vec, committees_per_slot: u64, slots_per_epoch: u64, diff --git a/consensus/types/src/blob_sidecar.rs b/consensus/types/src/blob_sidecar.rs index 2e8c2578976..d2c7331a579 100644 --- a/consensus/types/src/blob_sidecar.rs +++ b/consensus/types/src/blob_sidecar.rs @@ -7,7 +7,7 @@ use crate::{ beacon_block_body::BLOB_KZG_COMMITMENTS_INDEX, }; use bls::Signature; -use derivative::Derivative; +use educe::Educe; use kzg::{BYTES_PER_BLOB, BYTES_PER_FIELD_ELEMENT, Blob as KzgBlob, Kzg, KzgCommitment, KzgProof}; use merkle_proof::{MerkleTreeError, merkle_root_from_branch, verify_merkle_proof}; use rand::Rng; @@ -49,12 +49,10 @@ impl Ord for BlobIdentifier { derive(arbitrary::Arbitrary), arbitrary(bound = "E: EthSpec") )] -#[derive( - Debug, Clone, Serialize, Deserialize, Encode, Decode, TreeHash, TestRandom, Derivative, -)] +#[derive(Debug, Clone, Serialize, Deserialize, Encode, Decode, TreeHash, TestRandom, Educe)] #[context_deserialize(ForkName)] #[serde(bound = "E: EthSpec")] -#[derivative(PartialEq, Eq, Hash(bound = "E: EthSpec"))] +#[educe(PartialEq, Eq, Hash(bound(E: EthSpec)))] pub struct BlobSidecar { #[serde(with = "serde_utils::quoted_u64")] pub index: u64, diff --git a/consensus/types/src/chain_spec.rs b/consensus/types/src/chain_spec.rs index 02756b1e69e..4b0dd48c9c2 100644 --- a/consensus/types/src/chain_spec.rs +++ b/consensus/types/src/chain_spec.rs @@ -2,7 +2,7 @@ use crate::application_domain::{APPLICATION_DOMAIN_BUILDER, ApplicationDomain}; use crate::blob_sidecar::BlobIdentifier; use crate::data_column_sidecar::DataColumnsByRootIdentifier; use crate::*; -use derivative::Derivative; +use educe::Educe; use ethereum_hashing::hash; use int_to_bytes::int_to_bytes4; use safe_arith::{ArithError, SafeArith}; @@ -1648,15 +1648,15 @@ pub struct BlobParameters { // A wrapper around a vector of BlobParameters to ensure that the vector is reverse // sorted by epoch. #[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))] -#[derive(Debug, Derivative, Clone)] -#[derivative(PartialEq)] +#[derive(Debug, Educe, Clone)] +#[educe(PartialEq)] pub struct BlobSchedule { schedule: Vec, // This is a hack to prevent the blob schedule being serialized on the /eth/v1/config/spec // endpoint prior to the Fulu fork being scheduled. // // We can remove this once Fulu is live on mainnet. - #[derivative(PartialEq = "ignore")] + #[educe(PartialEq(ignore))] skip_serializing: bool, } diff --git a/consensus/types/src/data_column_sidecar.rs b/consensus/types/src/data_column_sidecar.rs index 2272b1695c9..62ce4467dfa 100644 --- a/consensus/types/src/data_column_sidecar.rs +++ b/consensus/types/src/data_column_sidecar.rs @@ -6,7 +6,7 @@ use crate::{ SignedBeaconBlockHeader, Slot, }; use bls::Signature; -use derivative::Derivative; +use educe::Educe; use kzg::Error as KzgError; use kzg::{KzgCommitment, KzgProof}; use merkle_proof::verify_merkle_proof; @@ -40,11 +40,9 @@ pub type DataColumnSidecarList = Vec>>; derive(arbitrary::Arbitrary), arbitrary(bound = "E: EthSpec") )] -#[derive( - Debug, Clone, Serialize, Deserialize, Encode, Decode, TreeHash, TestRandom, Derivative, -)] +#[derive(Debug, Clone, Serialize, Deserialize, Encode, Decode, TreeHash, TestRandom, Educe)] #[serde(bound = "E: EthSpec")] -#[derivative(PartialEq, Eq, Hash(bound = "E: EthSpec"))] +#[educe(PartialEq, Eq, Hash(bound(E: EthSpec)))] #[context_deserialize(ForkName)] pub struct DataColumnSidecar { #[serde(with = "serde_utils::quoted_u64")] diff --git a/consensus/types/src/data_column_subnet_id.rs b/consensus/types/src/data_column_subnet_id.rs index 4061cb4fdb0..c6b8846c783 100644 --- a/consensus/types/src/data_column_subnet_id.rs +++ b/consensus/types/src/data_column_subnet_id.rs @@ -1,18 +1,22 @@ //! Identifies each data column subnet by an integer identifier. use crate::ChainSpec; use crate::data_column_sidecar::ColumnIndex; -use derivative::Derivative; use safe_arith::{ArithError, SafeArith}; use serde::{Deserialize, Serialize}; use std::fmt::{self, Display}; use std::ops::{Deref, DerefMut}; #[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))] -#[derive(Clone, Copy, Derivative, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[derivative(Debug = "transparent")] +#[derive(Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] #[serde(transparent)] pub struct DataColumnSubnetId(#[serde(with = "serde_utils::quoted_u64")] u64); +impl fmt::Debug for DataColumnSubnetId { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + std::fmt::Debug::fmt(&self.0, f) + } +} + impl DataColumnSubnetId { pub fn new(id: u64) -> Self { id.into() diff --git a/consensus/types/src/execution_block_hash.rs b/consensus/types/src/execution_block_hash.rs index d3065afbbb0..31905d64dfa 100644 --- a/consensus/types/src/execution_block_hash.rs +++ b/consensus/types/src/execution_block_hash.rs @@ -1,18 +1,22 @@ use crate::FixedBytesExtended; use crate::Hash256; use crate::test_utils::TestRandom; -use derivative::Derivative; use rand::RngCore; use serde::{Deserialize, Serialize}; use ssz::{Decode, DecodeError, Encode}; use std::fmt; #[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))] -#[derive(Default, Clone, Copy, Serialize, Deserialize, Eq, PartialEq, Hash, Derivative)] -#[derivative(Debug = "transparent")] +#[derive(Default, Clone, Copy, Serialize, Deserialize, Eq, PartialEq, Hash)] #[serde(transparent)] pub struct ExecutionBlockHash(#[serde(with = "serde_utils::b256_hex")] pub Hash256); +impl fmt::Debug for ExecutionBlockHash { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + std::fmt::Debug::fmt(&self.0, f) + } +} + impl ExecutionBlockHash { pub fn zero() -> Self { Self(Hash256::zero()) diff --git a/consensus/types/src/execution_payload.rs b/consensus/types/src/execution_payload.rs index 7a899e5f022..3548f67db2e 100644 --- a/consensus/types/src/execution_payload.rs +++ b/consensus/types/src/execution_payload.rs @@ -1,5 +1,5 @@ use crate::{test_utils::TestRandom, *}; -use derivative::Derivative; +use educe::Educe; use serde::{Deserialize, Deserializer, Serialize}; use ssz::{Decode, Encode}; use ssz_derive::{Decode, Encode}; @@ -27,10 +27,10 @@ pub type Withdrawals = VariableList::MaxWithdrawal Decode, TreeHash, TestRandom, - Derivative, + Educe, ), context_deserialize(ForkName), - derivative(PartialEq, Hash(bound = "E: EthSpec")), + educe(PartialEq, Hash(bound(E: EthSpec))), serde(bound = "E: EthSpec", deny_unknown_fields), cfg_attr( feature = "arbitrary", @@ -48,8 +48,8 @@ pub type Withdrawals = VariableList::MaxWithdrawal derive(arbitrary::Arbitrary), arbitrary(bound = "E: EthSpec") )] -#[derive(Debug, Clone, Serialize, Deserialize, Encode, TreeHash, Derivative)] -#[derivative(PartialEq, Hash(bound = "E: EthSpec"))] +#[derive(Debug, Clone, Serialize, Deserialize, Encode, TreeHash, Educe)] +#[educe(PartialEq, Hash(bound(E: EthSpec)))] #[serde(bound = "E: EthSpec", untagged)] #[ssz(enum_behaviour = "transparent")] #[tree_hash(enum_behaviour = "transparent")] diff --git a/consensus/types/src/execution_payload_header.rs b/consensus/types/src/execution_payload_header.rs index 2f5fac87a9a..241ecb4ce6e 100644 --- a/consensus/types/src/execution_payload_header.rs +++ b/consensus/types/src/execution_payload_header.rs @@ -1,5 +1,5 @@ use crate::{test_utils::TestRandom, *}; -use derivative::Derivative; +use educe::Educe; use serde::{Deserialize, Deserializer, Serialize}; use ssz::{Decode, Encode}; use ssz_derive::{Decode, Encode}; @@ -20,9 +20,9 @@ use tree_hash_derive::TreeHash; Decode, TreeHash, TestRandom, - Derivative, + Educe, ), - derivative(PartialEq, Hash(bound = "E: EthSpec")), + educe(PartialEq, Hash(bound(E: EthSpec))), serde(bound = "E: EthSpec", deny_unknown_fields), cfg_attr( feature = "arbitrary", @@ -44,8 +44,8 @@ use tree_hash_derive::TreeHash; derive(arbitrary::Arbitrary), arbitrary(bound = "E: EthSpec") )] -#[derive(Debug, Clone, Serialize, Deserialize, Encode, TreeHash, Derivative)] -#[derivative(PartialEq, Hash(bound = "E: EthSpec"))] +#[derive(Debug, Clone, Serialize, Deserialize, Encode, TreeHash, Educe)] +#[educe(PartialEq, Hash(bound(E: EthSpec)))] #[serde(bound = "E: EthSpec", untagged)] #[tree_hash(enum_behaviour = "transparent")] #[ssz(enum_behaviour = "transparent")] diff --git a/consensus/types/src/execution_requests.rs b/consensus/types/src/execution_requests.rs index 592dda5d5e1..67396af71d4 100644 --- a/consensus/types/src/execution_requests.rs +++ b/consensus/types/src/execution_requests.rs @@ -2,7 +2,7 @@ use crate::context_deserialize; use crate::test_utils::TestRandom; use crate::{ConsolidationRequest, DepositRequest, EthSpec, ForkName, Hash256, WithdrawalRequest}; use alloy_primitives::Bytes; -use derivative::Derivative; +use educe::Educe; use ethereum_hashing::{DynamicContext, Sha256Context}; use serde::{Deserialize, Serialize}; use ssz::Encode; @@ -24,10 +24,10 @@ pub type ConsolidationRequests = arbitrary(bound = "E: EthSpec") )] #[derive( - Debug, Derivative, Default, Clone, Serialize, Deserialize, Encode, Decode, TreeHash, TestRandom, + Debug, Educe, Default, Clone, Serialize, Deserialize, Encode, Decode, TreeHash, TestRandom, )] #[serde(bound = "E: EthSpec")] -#[derivative(PartialEq, Eq, Hash(bound = "E: EthSpec"))] +#[educe(PartialEq, Eq, Hash(bound(E: EthSpec)))] #[context_deserialize(ForkName)] pub struct ExecutionRequests { pub deposits: DepositRequests, diff --git a/consensus/types/src/indexed_attestation.rs b/consensus/types/src/indexed_attestation.rs index 4ba695b9d51..dc328842176 100644 --- a/consensus/types/src/indexed_attestation.rs +++ b/consensus/types/src/indexed_attestation.rs @@ -3,7 +3,7 @@ use crate::{ AggregateSignature, AttestationData, EthSpec, ForkName, VariableList, test_utils::TestRandom, }; use core::slice::Iter; -use derivative::Derivative; +use educe::Educe; use serde::{Deserialize, Serialize}; use ssz::Encode; use ssz_derive::{Decode, Encode}; @@ -28,11 +28,11 @@ use tree_hash_derive::TreeHash; Decode, Encode, TestRandom, - Derivative, + Educe, TreeHash, ), context_deserialize(ForkName), - derivative(PartialEq, Hash(bound = "E: EthSpec")), + educe(PartialEq, Hash(bound(E: EthSpec))), serde(bound = "E: EthSpec", deny_unknown_fields), cfg_attr( feature = "arbitrary", @@ -46,7 +46,8 @@ use tree_hash_derive::TreeHash; derive(arbitrary::Arbitrary), arbitrary(bound = "E: EthSpec") )] -#[derive(Debug, Clone, Serialize, TreeHash, Encode, Derivative, Deserialize, PartialEq)] +#[derive(Debug, Clone, Serialize, TreeHash, Encode, Educe, Deserialize)] +#[educe(PartialEq)] #[serde(untagged)] #[tree_hash(enum_behaviour = "transparent")] #[ssz(enum_behaviour = "transparent")] diff --git a/consensus/types/src/light_client_bootstrap.rs b/consensus/types/src/light_client_bootstrap.rs index 1345cee2244..80d5bbacf9e 100644 --- a/consensus/types/src/light_client_bootstrap.rs +++ b/consensus/types/src/light_client_bootstrap.rs @@ -5,7 +5,7 @@ use crate::{ LightClientHeaderElectra, LightClientHeaderFulu, LightClientHeaderGloas, SignedBlindedBeaconBlock, Slot, SyncCommittee, light_client_update::*, test_utils::TestRandom, }; -use derivative::Derivative; +use educe::Educe; use serde::{Deserialize, Deserializer, Serialize}; use ssz::{Decode, Encode}; use ssz_derive::{Decode, Encode}; @@ -22,15 +22,15 @@ use tree_hash_derive::TreeHash; derive( Debug, Clone, - PartialEq, Serialize, Deserialize, - Derivative, + Educe, Decode, Encode, TestRandom, TreeHash, ), + educe(PartialEq), serde(bound = "E: EthSpec", deny_unknown_fields), cfg_attr( feature = "arbitrary", diff --git a/consensus/types/src/light_client_finality_update.rs b/consensus/types/src/light_client_finality_update.rs index 644824f12c2..e58d7f4d72b 100644 --- a/consensus/types/src/light_client_finality_update.rs +++ b/consensus/types/src/light_client_finality_update.rs @@ -7,7 +7,7 @@ use crate::{ LightClientHeaderGloas, SignedBlindedBeaconBlock, light_client_update::*, test_utils::TestRandom, }; -use derivative::Derivative; +use educe::Educe; use serde::{Deserialize, Deserializer, Serialize}; use ssz::{Decode, Encode}; use ssz_derive::Decode; @@ -22,15 +22,15 @@ use tree_hash_derive::TreeHash; derive( Debug, Clone, - PartialEq, Serialize, Deserialize, - Derivative, + Educe, Decode, Encode, TestRandom, TreeHash, ), + educe(PartialEq), serde(bound = "E: EthSpec", deny_unknown_fields), cfg_attr( feature = "arbitrary", diff --git a/consensus/types/src/light_client_header.rs b/consensus/types/src/light_client_header.rs index 162203138ab..5820efcc91b 100644 --- a/consensus/types/src/light_client_header.rs +++ b/consensus/types/src/light_client_header.rs @@ -8,7 +8,7 @@ use crate::{ ExecutionPayloadHeaderElectra, ExecutionPayloadHeaderFulu, ExecutionPayloadHeaderGloas, FixedVector, Hash256, SignedBlindedBeaconBlock, test_utils::TestRandom, }; -use derivative::Derivative; +use educe::Educe; use serde::{Deserialize, Deserializer, Serialize}; use ssz::Decode; use ssz_derive::{Decode, Encode}; @@ -23,15 +23,15 @@ use tree_hash_derive::TreeHash; derive( Debug, Clone, - PartialEq, Serialize, Deserialize, - Derivative, + Educe, Decode, Encode, TestRandom, TreeHash, ), + educe(PartialEq), serde(bound = "E: EthSpec", deny_unknown_fields), cfg_attr( feature = "arbitrary", diff --git a/consensus/types/src/light_client_optimistic_update.rs b/consensus/types/src/light_client_optimistic_update.rs index 7528322d567..ca9957331f8 100644 --- a/consensus/types/src/light_client_optimistic_update.rs +++ b/consensus/types/src/light_client_optimistic_update.rs @@ -6,7 +6,7 @@ use crate::{ LightClientHeaderElectra, LightClientHeaderFulu, LightClientHeaderGloas, SignedBlindedBeaconBlock, light_client_update::*, }; -use derivative::Derivative; +use educe::Educe; use serde::{Deserialize, Deserializer, Serialize}; use ssz::{Decode, Encode}; use ssz_derive::Decode; @@ -24,15 +24,15 @@ use tree_hash_derive::TreeHash; derive( Debug, Clone, - PartialEq, Serialize, Deserialize, - Derivative, + Educe, Decode, Encode, TestRandom, TreeHash, ), + educe(PartialEq), serde(bound = "E: EthSpec", deny_unknown_fields), cfg_attr( feature = "arbitrary", diff --git a/consensus/types/src/light_client_update.rs b/consensus/types/src/light_client_update.rs index afb7ebc96dc..ede9436c50d 100644 --- a/consensus/types/src/light_client_update.rs +++ b/consensus/types/src/light_client_update.rs @@ -7,7 +7,7 @@ use crate::{ LightClientHeaderCapella, LightClientHeaderDeneb, LightClientHeaderFulu, LightClientHeaderGloas, SignedBlindedBeaconBlock, beacon_state, test_utils::TestRandom, }; -use derivative::Derivative; +use educe::Educe; use safe_arith::ArithError; use safe_arith::SafeArith; use serde::{Deserialize, Deserializer, Serialize}; @@ -105,15 +105,15 @@ impl From for Error { derive( Debug, Clone, - PartialEq, Serialize, Deserialize, - Derivative, + Educe, Decode, Encode, TestRandom, TreeHash, ), + educe(PartialEq), serde(bound = "E: EthSpec", deny_unknown_fields), cfg_attr( feature = "arbitrary", diff --git a/consensus/types/src/payload.rs b/consensus/types/src/payload.rs index 28dc10f9384..370c73ad0a6 100644 --- a/consensus/types/src/payload.rs +++ b/consensus/types/src/payload.rs @@ -1,5 +1,5 @@ use crate::{test_utils::TestRandom, *}; -use derivative::Derivative; +use educe::Educe; use serde::de::DeserializeOwned; use serde::{Deserialize, Serialize}; use ssz::{Decode, Encode}; @@ -161,9 +161,9 @@ pub trait AbstractExecPayload: Decode, TestRandom, TreeHash, - Derivative, + Educe, ), - derivative(PartialEq, Hash(bound = "E: EthSpec")), + educe(PartialEq, Hash(bound(E: EthSpec))), serde(bound = "E: EthSpec", deny_unknown_fields), cfg_attr( feature = "arbitrary", @@ -173,8 +173,8 @@ pub trait AbstractExecPayload: ssz(struct_behaviour = "transparent"), ), ref_attributes( - derive(Debug, Derivative, TreeHash), - derivative(PartialEq, Hash(bound = "E: EthSpec")), + derive(Debug, Educe, TreeHash), + educe(PartialEq, Hash(bound(E: EthSpec))), tree_hash(enum_behaviour = "transparent"), ), map_into(ExecutionPayload), @@ -187,8 +187,8 @@ pub trait AbstractExecPayload: derive(arbitrary::Arbitrary), arbitrary(bound = "E: EthSpec") )] -#[derive(Debug, Clone, Serialize, Deserialize, TreeHash, Derivative)] -#[derivative(PartialEq, Hash(bound = "E: EthSpec"))] +#[derive(Debug, Clone, Serialize, Deserialize, TreeHash, Educe)] +#[educe(PartialEq, Hash(bound(E: EthSpec)))] #[serde(bound = "E: EthSpec")] #[tree_hash(enum_behaviour = "transparent")] pub struct FullPayload { @@ -531,9 +531,9 @@ impl TryFrom> for FullPayload { Decode, TestRandom, TreeHash, - Derivative, + Educe, ), - derivative(PartialEq, Hash(bound = "E: EthSpec")), + educe(PartialEq, Hash(bound(E: EthSpec))), serde(bound = "E: EthSpec", deny_unknown_fields), cfg_attr( feature = "arbitrary", @@ -543,8 +543,8 @@ impl TryFrom> for FullPayload { ssz(struct_behaviour = "transparent"), ), ref_attributes( - derive(Debug, Derivative, TreeHash), - derivative(PartialEq, Hash(bound = "E: EthSpec")), + derive(Debug, Educe, TreeHash), + educe(PartialEq, Hash(bound(E: EthSpec))), tree_hash(enum_behaviour = "transparent"), ), map_into(ExecutionPayloadHeader), @@ -556,8 +556,8 @@ impl TryFrom> for FullPayload { derive(arbitrary::Arbitrary), arbitrary(bound = "E: EthSpec") )] -#[derive(Debug, Clone, Serialize, Deserialize, TreeHash, Derivative)] -#[derivative(PartialEq, Hash(bound = "E: EthSpec"))] +#[derive(Debug, Clone, Serialize, Deserialize, TreeHash, Educe)] +#[educe(PartialEq, Hash(bound(E: EthSpec)))] #[serde(bound = "E: EthSpec")] #[tree_hash(enum_behaviour = "transparent")] pub struct BlindedPayload { diff --git a/consensus/types/src/runtime_var_list.rs b/consensus/types/src/runtime_var_list.rs index d57c65b1b71..e7b846029ef 100644 --- a/consensus/types/src/runtime_var_list.rs +++ b/consensus/types/src/runtime_var_list.rs @@ -1,5 +1,5 @@ use crate::ContextDeserialize; -use derivative::Derivative; +use educe::Educe; use serde::de::Error as DeError; use serde::{Deserialize, Deserializer, Serialize}; use ssz::Decode; @@ -44,8 +44,8 @@ use tree_hash::{Hash256, MerkleHasher, PackedEncoding, TreeHash, TreeHashType}; /// assert!(long.push(6).is_err()); /// /// ``` -#[derive(Clone, Serialize, Deserialize, Derivative)] -#[derivative(PartialEq, Eq, Hash(bound = "T: std::hash::Hash"))] +#[derive(Clone, Serialize, Deserialize, Educe)] +#[educe(PartialEq, Eq, Hash(bound(T: std::hash::Hash)))] #[serde(transparent)] pub struct RuntimeVariableList { vec: Vec, diff --git a/consensus/types/src/signed_beacon_block.rs b/consensus/types/src/signed_beacon_block.rs index 979b91e30d5..35d2faac483 100644 --- a/consensus/types/src/signed_beacon_block.rs +++ b/consensus/types/src/signed_beacon_block.rs @@ -1,7 +1,7 @@ use crate::beacon_block_body::{BLOB_KZG_COMMITMENTS_INDEX, format_kzg_commitments}; use crate::test_utils::TestRandom; use crate::*; -use derivative::Derivative; +use educe::Educe; use merkle_proof::MerkleTree; use serde::{Deserialize, Deserializer, Serialize}; use ssz_derive::{Decode, Encode}; @@ -51,10 +51,10 @@ impl From for Hash256 { Encode, Decode, TreeHash, - Derivative, + Educe, TestRandom ), - derivative(PartialEq, Hash(bound = "E: EthSpec")), + educe(PartialEq, Hash(bound(E: EthSpec))), serde(bound = "E: EthSpec, Payload: AbstractExecPayload"), cfg_attr( feature = "arbitrary", @@ -71,8 +71,8 @@ impl From for Hash256 { derive(arbitrary::Arbitrary), arbitrary(bound = "E: EthSpec, Payload: AbstractExecPayload") )] -#[derive(Debug, Clone, Serialize, Deserialize, Encode, TreeHash, Derivative)] -#[derivative(PartialEq, Hash(bound = "E: EthSpec"))] +#[derive(Debug, Clone, Serialize, Deserialize, Encode, TreeHash, Educe)] +#[educe(PartialEq, Hash(bound(E: EthSpec)))] #[serde(untagged)] #[serde(bound = "E: EthSpec, Payload: AbstractExecPayload")] #[tree_hash(enum_behaviour = "transparent")] diff --git a/consensus/types/src/sync_aggregate.rs b/consensus/types/src/sync_aggregate.rs index 7a4ef8f026a..ba6d840a526 100644 --- a/consensus/types/src/sync_aggregate.rs +++ b/consensus/types/src/sync_aggregate.rs @@ -2,7 +2,7 @@ use crate::consts::altair::SYNC_COMMITTEE_SUBNET_COUNT; use crate::context_deserialize; use crate::test_utils::TestRandom; use crate::{AggregateSignature, BitVector, EthSpec, ForkName, SyncCommitteeContribution}; -use derivative::Derivative; +use educe::Educe; use safe_arith::{ArithError, SafeArith}; use serde::{Deserialize, Serialize}; use ssz_derive::{Decode, Encode}; @@ -26,10 +26,8 @@ impl From for Error { derive(arbitrary::Arbitrary), arbitrary(bound = "E: EthSpec") )] -#[derive( - Debug, Clone, Serialize, Deserialize, Encode, Decode, TreeHash, TestRandom, Derivative, -)] -#[derivative(PartialEq, Hash(bound = "E: EthSpec"))] +#[derive(Debug, Clone, Serialize, Deserialize, Encode, Decode, TreeHash, TestRandom, Educe)] +#[educe(PartialEq, Hash(bound(E: EthSpec)))] #[serde(bound = "E: EthSpec")] #[context_deserialize(ForkName)] pub struct SyncAggregate { diff --git a/crypto/kzg/Cargo.toml b/crypto/kzg/Cargo.toml index 432fcc1792e..5a36eb74f70 100644 --- a/crypto/kzg/Cargo.toml +++ b/crypto/kzg/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" [dependencies] arbitrary = { workspace = true } c-kzg = { workspace = true } -derivative = { workspace = true } +educe = { workspace = true } ethereum_hashing = { workspace = true } ethereum_serde_utils = { workspace = true } ethereum_ssz = { workspace = true } diff --git a/crypto/kzg/src/kzg_commitment.rs b/crypto/kzg/src/kzg_commitment.rs index cfab09f63e7..5a5e689429e 100644 --- a/crypto/kzg/src/kzg_commitment.rs +++ b/crypto/kzg/src/kzg_commitment.rs @@ -1,5 +1,5 @@ use c_kzg::BYTES_PER_COMMITMENT; -use derivative::Derivative; +use educe::Educe; use ethereum_hashing::hash_fixed; use serde::de::{Deserialize, Deserializer}; use serde::ser::{Serialize, Serializer}; @@ -11,8 +11,8 @@ use tree_hash::{Hash256, PackedEncoding, TreeHash}; pub const VERSIONED_HASH_VERSION_KZG: u8 = 0x01; -#[derive(Derivative, Clone, Copy, Encode, Decode)] -#[derivative(PartialEq, Eq, Hash)] +#[derive(Educe, Clone, Copy, Encode, Decode)] +#[educe(PartialEq, Eq, Hash)] #[ssz(struct_behaviour = "transparent")] pub struct KzgCommitment(pub [u8; c_kzg::BYTES_PER_COMMITMENT]); diff --git a/lighthouse/tests/beacon_node.rs b/lighthouse/tests/beacon_node.rs index 8342b021738..207324ea33f 100644 --- a/lighthouse/tests/beacon_node.rs +++ b/lighthouse/tests/beacon_node.rs @@ -481,7 +481,12 @@ fn run_execution_jwt_secret_key_is_persisted() { .with_config(|config| { let config = config.execution_layer.as_ref().unwrap(); assert_eq!( - config.execution_endpoint.as_ref().unwrap().full.to_string(), + config + .execution_endpoint + .as_ref() + .unwrap() + .expose_full() + .to_string(), "http://localhost:8551/" ); let mut file_jwt_secret_key = String::new(); @@ -532,7 +537,12 @@ fn bellatrix_jwt_secrets_flag() { .with_config(|config| { let config = config.execution_layer.as_ref().unwrap(); assert_eq!( - config.execution_endpoint.as_ref().unwrap().full.to_string(), + config + .execution_endpoint + .as_ref() + .unwrap() + .expose_full() + .to_string(), "http://localhost:8551/" ); assert_eq!( diff --git a/lighthouse/tests/validator_client.rs b/lighthouse/tests/validator_client.rs index 398c6fbd6b2..ee3e910b369 100644 --- a/lighthouse/tests/validator_client.rs +++ b/lighthouse/tests/validator_client.rs @@ -109,12 +109,12 @@ fn beacon_nodes_flag() { .run() .with_config(|config| { assert_eq!( - config.beacon_nodes[0].full.to_string(), + config.beacon_nodes[0].expose_full().to_string(), "http://localhost:1001/" ); assert_eq!(config.beacon_nodes[0].to_string(), "http://localhost:1001/"); assert_eq!( - config.beacon_nodes[1].full.to_string(), + config.beacon_nodes[1].expose_full().to_string(), "https://project:secret@infura.io/" ); assert_eq!(config.beacon_nodes[1].to_string(), "https://infura.io/"); diff --git a/slasher/Cargo.toml b/slasher/Cargo.toml index b2f6eca9c37..cca55bcef88 100644 --- a/slasher/Cargo.toml +++ b/slasher/Cargo.toml @@ -14,7 +14,7 @@ portable = ["types/portable"] [dependencies] bincode = { workspace = true } byteorder = { workspace = true } -derivative = { workspace = true } +educe = { workspace = true } ethereum_ssz = { workspace = true } ethereum_ssz_derive = { workspace = true } filesystem = { workspace = true } diff --git a/slasher/src/database/redb_impl.rs b/slasher/src/database/redb_impl.rs index 4198e826455..570d7df1318 100644 --- a/slasher/src/database/redb_impl.rs +++ b/slasher/src/database/redb_impl.rs @@ -7,7 +7,7 @@ use crate::{ *, }, }; -use derivative::Derivative; +use educe::Educe; use redb::{ReadableTable, TableDefinition}; use std::{borrow::Cow, path::PathBuf}; @@ -23,18 +23,18 @@ pub struct Database<'env> { _phantom: PhantomData<&'env ()>, } -#[derive(Derivative)] -#[derivative(Debug)] +#[derive(Educe)] +#[educe(Debug)] pub struct RwTransaction<'env> { - #[derivative(Debug = "ignore")] + #[educe(Debug(ignore))] txn: redb::WriteTransaction, _phantom: PhantomData<&'env ()>, } -#[derive(Derivative)] -#[derivative(Debug)] +#[derive(Educe)] +#[educe(Debug)] pub struct Cursor<'env> { - #[derivative(Debug = "ignore")] + #[educe(Debug(ignore))] txn: &'env redb::WriteTransaction, db: &'env Database<'env>, current_key: Option>, diff --git a/testing/ef_tests/Cargo.toml b/testing/ef_tests/Cargo.toml index d9afce0efe7..581785e2a97 100644 --- a/testing/ef_tests/Cargo.toml +++ b/testing/ef_tests/Cargo.toml @@ -17,7 +17,7 @@ beacon_chain = { workspace = true } bls = { workspace = true } compare_fields = { workspace = true } context_deserialize = { workspace = true } -derivative = { workspace = true } +educe = { workspace = true } eth2_network_config = { workspace = true } ethereum_ssz = { workspace = true } ethereum_ssz_derive = { workspace = true } diff --git a/testing/ef_tests/src/handler.rs b/testing/ef_tests/src/handler.rs index b49ab2d90d4..a5b2ffada37 100644 --- a/testing/ef_tests/src/handler.rs +++ b/testing/ef_tests/src/handler.rs @@ -2,7 +2,7 @@ use crate::cases::{self, Case, Cases, EpochTransition, LoadCase, Operation}; use crate::type_name::TypeName; use crate::{FeatureName, type_name}; use context_deserialize::ContextDeserialize; -use derivative::Derivative; +use educe::Educe; use std::fs::{self, DirEntry}; use std::marker::PhantomData; use std::path::PathBuf; @@ -154,8 +154,8 @@ pub trait Handler { macro_rules! bls_eth_handler { ($runner_name: ident, $case_name:ident, $handler_name:expr) => { - #[derive(Derivative)] - #[derivative(Default(bound = ""))] + #[derive(Educe)] + #[educe(Default)] pub struct $runner_name; impl Handler for $runner_name { @@ -174,8 +174,8 @@ macro_rules! bls_eth_handler { macro_rules! bls_handler { ($runner_name: ident, $case_name:ident, $handler_name:expr) => { - #[derive(Derivative)] - #[derivative(Default(bound = ""))] + #[derive(Educe)] + #[educe(Default)] pub struct $runner_name; impl Handler for $runner_name { @@ -335,8 +335,8 @@ impl SszStaticHandler { } /// Handler for SSZ types that implement `CachedTreeHash`. -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct SszStaticTHCHandler(PhantomData<(T, E)>); /// Handler for SSZ types that don't implement `ssz::Decode`. @@ -436,8 +436,8 @@ where } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct ShufflingHandler(PhantomData); impl Handler for ShufflingHandler { @@ -460,8 +460,8 @@ impl Handler for ShufflingHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct SanityBlocksHandler(PhantomData); impl Handler for SanityBlocksHandler { @@ -486,8 +486,8 @@ impl Handler for SanityBlocksHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct SanitySlotsHandler(PhantomData); impl Handler for SanitySlotsHandler { @@ -511,8 +511,8 @@ impl Handler for SanitySlotsHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct RandomHandler(PhantomData); impl Handler for RandomHandler { @@ -531,8 +531,8 @@ impl Handler for RandomHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct EpochProcessingHandler(PhantomData<(E, T)>); impl> Handler for EpochProcessingHandler { @@ -581,8 +581,8 @@ impl Handler for RewardsHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct ForkHandler(PhantomData); impl Handler for ForkHandler { @@ -601,8 +601,8 @@ impl Handler for ForkHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct TransitionHandler(PhantomData); impl Handler for TransitionHandler { @@ -621,8 +621,8 @@ impl Handler for TransitionHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct FinalityHandler(PhantomData); impl Handler for FinalityHandler { @@ -705,8 +705,8 @@ impl Handler for ForkChoiceHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct OptimisticSyncHandler(PhantomData); impl Handler for OptimisticSyncHandler { @@ -734,8 +734,8 @@ impl Handler for OptimisticSyncHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct GenesisValidityHandler(PhantomData); impl Handler for GenesisValidityHandler { @@ -754,8 +754,8 @@ impl Handler for GenesisValidityHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct GenesisInitializationHandler(PhantomData); impl Handler for GenesisInitializationHandler { @@ -774,8 +774,8 @@ impl Handler for GenesisInitializationHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct KZGBlobToKZGCommitmentHandler(PhantomData); impl Handler for KZGBlobToKZGCommitmentHandler { @@ -794,8 +794,8 @@ impl Handler for KZGBlobToKZGCommitmentHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct KZGComputeBlobKZGProofHandler(PhantomData); impl Handler for KZGComputeBlobKZGProofHandler { @@ -814,8 +814,8 @@ impl Handler for KZGComputeBlobKZGProofHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct KZGComputeKZGProofHandler(PhantomData); impl Handler for KZGComputeKZGProofHandler { @@ -834,8 +834,8 @@ impl Handler for KZGComputeKZGProofHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct KZGVerifyBlobKZGProofHandler(PhantomData); impl Handler for KZGVerifyBlobKZGProofHandler { @@ -854,8 +854,8 @@ impl Handler for KZGVerifyBlobKZGProofHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct KZGVerifyBlobKZGProofBatchHandler(PhantomData); impl Handler for KZGVerifyBlobKZGProofBatchHandler { @@ -874,8 +874,8 @@ impl Handler for KZGVerifyBlobKZGProofBatchHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct KZGVerifyKZGProofHandler(PhantomData); impl Handler for KZGVerifyKZGProofHandler { @@ -894,8 +894,8 @@ impl Handler for KZGVerifyKZGProofHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct GetCustodyGroupsHandler(PhantomData); impl Handler for GetCustodyGroupsHandler { @@ -914,8 +914,8 @@ impl Handler for GetCustodyGroupsHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct ComputeColumnsForCustodyGroupHandler(PhantomData); impl Handler for ComputeColumnsForCustodyGroupHandler { @@ -934,8 +934,8 @@ impl Handler for ComputeColumnsForCustodyGroupHandler } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct KZGComputeCellsHandler(PhantomData); impl Handler for KZGComputeCellsHandler { @@ -954,8 +954,8 @@ impl Handler for KZGComputeCellsHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct KZGComputeCellsAndKZGProofHandler(PhantomData); impl Handler for KZGComputeCellsAndKZGProofHandler { @@ -974,8 +974,8 @@ impl Handler for KZGComputeCellsAndKZGProofHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct KZGVerifyCellKZGProofBatchHandler(PhantomData); impl Handler for KZGVerifyCellKZGProofBatchHandler { @@ -994,8 +994,8 @@ impl Handler for KZGVerifyCellKZGProofBatchHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct KZGRecoverCellsAndKZGProofHandler(PhantomData); impl Handler for KZGRecoverCellsAndKZGProofHandler { @@ -1014,8 +1014,8 @@ impl Handler for KZGRecoverCellsAndKZGProofHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct KzgInclusionMerkleProofValidityHandler(PhantomData); impl Handler for KzgInclusionMerkleProofValidityHandler { @@ -1038,8 +1038,8 @@ impl Handler for KzgInclusionMerkleProofValidityHandler(PhantomData); impl Handler for MerkleProofValidityHandler { @@ -1062,8 +1062,8 @@ impl Handler for MerkleProofValidityHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct LightClientUpdateHandler(PhantomData); impl Handler for LightClientUpdateHandler { @@ -1087,8 +1087,8 @@ impl Handler for LightClientUpdateHandler { } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct OperationsHandler(PhantomData<(E, O)>); impl> Handler for OperationsHandler { @@ -1107,8 +1107,8 @@ impl> Handler for OperationsHandler } } -#[derive(Derivative)] -#[derivative(Default(bound = ""))] +#[derive(Educe)] +#[educe(Default)] pub struct SszGenericHandler(PhantomData); impl Handler for SszGenericHandler { diff --git a/testing/execution_engine_integration/src/test_rig.rs b/testing/execution_engine_integration/src/test_rig.rs index 05ec0a2f191..9e45a788704 100644 --- a/testing/execution_engine_integration/src/test_rig.rs +++ b/testing/execution_engine_integration/src/test_rig.rs @@ -64,7 +64,7 @@ async fn import_and_unlock(http_url: SensitiveUrl, priv_keys: &[&str], password: let client = Client::builder().build().unwrap(); let request = client - .post(http_url.full.clone()) + .post(http_url.expose_full().clone()) .header(CONTENT_TYPE, "application/json") .json(&body); @@ -90,7 +90,7 @@ async fn import_and_unlock(http_url: SensitiveUrl, priv_keys: &[&str], password: ); let request = client - .post(http_url.full.clone()) + .post(http_url.expose_full().clone()) .header(CONTENT_TYPE, "application/json") .json(&body); diff --git a/testing/simulator/Cargo.toml b/testing/simulator/Cargo.toml index cd23138a1cc..54035f2e827 100644 --- a/testing/simulator/Cargo.toml +++ b/testing/simulator/Cargo.toml @@ -15,7 +15,7 @@ logging = { workspace = true } node_test_rig = { path = "../node_test_rig" } parking_lot = { workspace = true } rayon = { workspace = true } -sensitive_url = { path = "../../common/sensitive_url" } +sensitive_url = { workspace = true } serde_json = { workspace = true } tokio = { workspace = true } tracing = { workspace = true } diff --git a/validator_client/beacon_node_fallback/src/lib.rs b/validator_client/beacon_node_fallback/src/lib.rs index a3f60d2de04..0f13d8c8b7b 100644 --- a/validator_client/beacon_node_fallback/src/lib.rs +++ b/validator_client/beacon_node_fallback/src/lib.rs @@ -656,7 +656,7 @@ impl BeaconNodeFallback { R: Future>, Err: Debug, { - inc_counter_vec(&ENDPOINT_REQUESTS, &[candidate.as_ref()]); + inc_counter_vec(&ENDPOINT_REQUESTS, &[candidate.server().redacted()]); // There exists a race condition where `func` may be called when the candidate is // actually not ready. We deem this an acceptable inefficiency. @@ -668,7 +668,7 @@ impl BeaconNodeFallback { error = ?e, "Request to beacon node failed" ); - inc_counter_vec(&ENDPOINT_ERRORS, &[candidate.as_ref()]); + inc_counter_vec(&ENDPOINT_ERRORS, &[candidate.server().redacted()]); Err((candidate.to_string(), Error::RequestFailed(e))) } } diff --git a/validator_manager/Cargo.toml b/validator_manager/Cargo.toml index 9192f0e86b0..6ef179fbe99 100644 --- a/validator_manager/Cargo.toml +++ b/validator_manager/Cargo.toml @@ -8,7 +8,7 @@ edition = { workspace = true } account_utils = { workspace = true } clap = { workspace = true } clap_utils = { workspace = true } -derivative = { workspace = true } +educe = { workspace = true } environment = { workspace = true } eth2 = { workspace = true } eth2_network_config = { workspace = true } diff --git a/validator_manager/src/exit_validators.rs b/validator_manager/src/exit_validators.rs index a6bbf05fb4a..4a398793ce1 100644 --- a/validator_manager/src/exit_validators.rs +++ b/validator_manager/src/exit_validators.rs @@ -191,8 +191,7 @@ async fn run(config: ExitConfig) -> Result<(), String> { // Only publish the voluntary exit if the --beacon-node flag is present if let Some(ref beacon_url) = beacon_url { let beacon_node = BeaconNodeHttpClient::new( - SensitiveUrl::parse(beacon_url.as_ref()) - .map_err(|e| format!("Failed to parse beacon http server: {:?}", e))?, + beacon_url.clone(), Timeouts::set_all(Duration::from_secs(12)), ); @@ -399,7 +398,7 @@ mod test { }) .collect(); - let beacon_url = SensitiveUrl::parse(self.beacon_node.client.as_ref()).unwrap(); + let beacon_url = self.beacon_node.client.server().clone(); let validators_to_exit = index_of_validators_to_exit .iter() diff --git a/validator_manager/src/import_validators.rs b/validator_manager/src/import_validators.rs index 5f5f049ed97..24917f7d1b4 100644 --- a/validator_manager/src/import_validators.rs +++ b/validator_manager/src/import_validators.rs @@ -3,7 +3,7 @@ use crate::DumpConfig; use account_utils::eth2_keystore::Keystore; use clap::{Arg, ArgAction, ArgMatches, Command}; use clap_utils::FLAG_HEADER; -use derivative::Derivative; +use educe::Educe; use eth2::lighthouse_vc::types::KeystoreJsonStr; use eth2::{SensitiveUrl, lighthouse_vc::std_types::ImportKeystoreStatus}; use serde::{Deserialize, Serialize}; @@ -159,15 +159,15 @@ pub fn cli_app() -> Command { ) } -#[derive(Clone, PartialEq, Serialize, Deserialize, Derivative)] -#[derivative(Debug)] +#[derive(Clone, PartialEq, Serialize, Deserialize, Educe)] +#[educe(Debug)] pub struct ImportConfig { pub validators_file_path: Option, pub keystore_file_path: Option, pub vc_url: SensitiveUrl, pub vc_token_path: PathBuf, pub ignore_duplicates: bool, - #[derivative(Debug = "ignore")] + #[educe(Debug(ignore))] pub password: Option>, pub fee_recipient: Option
, pub gas_limit: Option, diff --git a/validator_manager/src/list_validators.rs b/validator_manager/src/list_validators.rs index b064982adf4..082894a995d 100644 --- a/validator_manager/src/list_validators.rs +++ b/validator_manager/src/list_validators.rs @@ -134,8 +134,7 @@ async fn run(config: ListConfig) -> Result Date: Thu, 30 Oct 2025 21:30:09 -0400 Subject: [PATCH 02/47] refactor: ethproofs zkattester demo --- Cargo.lock | 4361 ++++++++++++----- consensus/types/src/execution_proof.rs | 8 +- zkvm_execution_layer/Cargo.toml | 12 + zkvm_execution_layer/src/.DS_Store | Bin 0 -> 6148 bytes zkvm_execution_layer/src/dummy_proof_gen.rs | 159 +- .../src/dummy_proof_verifier.rs | 21 +- zkvm_execution_layer/src/ethproofs_demo.rs | 273 ++ zkvm_execution_layer/src/lib.rs | 5 + ...s_79041a5b-ee8d-49b3-8207-86c7debf8e13.bin | Bin 0 -> 234 bytes .../src/verification_keys/mod.rs | 262 + ...k_33f14a82-47b7-42d7-9bc1-b81a46eea4fe.bin | 1 + ...m_84a01f4b-8078-44cf-b463-90ddcd124960.bin | Bin 0 -> 234 bytes zkvm_execution_layer/src/verifiers/mod.rs | 161 + zkvm_execution_layer/src/verifiers/pico.rs | 90 + zkvm_execution_layer/src/verifiers/zisk.rs | 40 + zkvm_execution_layer/src/verifiers/zkm.rs | 41 + 16 files changed, 4269 insertions(+), 1165 deletions(-) create mode 100644 zkvm_execution_layer/src/.DS_Store create mode 100644 zkvm_execution_layer/src/ethproofs_demo.rs create mode 100644 zkvm_execution_layer/src/verification_keys/brevis_79041a5b-ee8d-49b3-8207-86c7debf8e13.bin create mode 100644 zkvm_execution_layer/src/verification_keys/mod.rs create mode 100644 zkvm_execution_layer/src/verification_keys/zisk_33f14a82-47b7-42d7-9bc1-b81a46eea4fe.bin create mode 100644 zkvm_execution_layer/src/verification_keys/zkm_84a01f4b-8078-44cf-b463-90ddcd124960.bin create mode 100644 zkvm_execution_layer/src/verifiers/mod.rs create mode 100644 zkvm_execution_layer/src/verifiers/pico.rs create mode 100644 zkvm_execution_layer/src/verifiers/zisk.rs create mode 100644 zkvm_execution_layer/src/verifiers/zkm.rs diff --git a/Cargo.lock b/Cargo.lock index 5b960ea0141..f0bab57b5f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -37,7 +37,7 @@ dependencies = [ "eth2_keystore", "eth2_wallet", "filesystem", - "rand 0.9.0", + "rand 0.9.2", "regex", "rpassword", "serde", @@ -48,20 +48,31 @@ dependencies = [ "zeroize", ] +[[package]] +name = "addchain" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2e69442aa5628ea6951fa33e24efe8313f4321a91bd729fc2f75bdfc858570" +dependencies = [ + "num-bigint 0.3.3", + "num-integer", + "num-traits", +] + [[package]] name = "addr2line" -version = "0.24.2" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" dependencies = [ "gimli", ] [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aead" @@ -70,7 +81,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ "crypto-common", - "generic-array 0.14.7", + "generic-array 0.14.9", ] [[package]] @@ -113,21 +124,21 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", "once_cell", "version_check", - "zerocopy 0.7.35", + "zerocopy", ] [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -150,7 +161,7 @@ dependencies = [ "alloy-serde", "alloy-trie", "alloy-tx-macros", - "auto_impl 1.2.1", + "auto_impl 1.3.0", "c-kzg", "derive_more 2.0.1", "either", @@ -160,7 +171,7 @@ dependencies = [ "secp256k1", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -190,7 +201,7 @@ dependencies = [ "itoa", "serde", "serde_json", - "winnow", + "winnow 0.7.13", ] [[package]] @@ -203,14 +214,14 @@ dependencies = [ "alloy-rlp", "crc", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] name = "alloy-eip2930" -version = "0.2.0" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe3e16484669964c26ac48390245d84c410b1a5f968976076c17184725ef235" +checksum = "9441120fa82df73e8959ae0e4ab8ade03de2aaae61be313fbf5746277847ce25" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -219,21 +230,21 @@ dependencies = [ [[package]] name = "alloy-eip7702" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d4769c6ffddca380b0070d71c8b7f30bed375543fe76bb2f74ec0acf4b7cd16" +checksum = "2919c5a56a1007492da313e7a3b6d45ef5edc5d33416fdec63c0d7a2702a0d20" dependencies = [ "alloy-primitives", "alloy-rlp", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] name = "alloy-eips" -version = "1.0.42" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07d9a64522a0db6ebcc4ff9c904e329e77dd737c2c25d30f1bdc32ca6c6ce334" +checksum = "7bdbec74583d0067798d77afa43d58f00d93035335d7ceaa5d3f93857d461bb9" dependencies = [ "alloy-eip2124", "alloy-eip2930", @@ -241,14 +252,14 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "alloy-serde", - "auto_impl 1.2.1", + "auto_impl 1.3.0", "c-kzg", "derive_more 2.0.1", "either", "serde", "serde_with", - "sha2 0.10.8", - "thiserror 2.0.12", + "sha2 0.10.9", + "thiserror 2.0.17", ] [[package]] @@ -289,16 +300,16 @@ dependencies = [ "const-hex", "derive_more 2.0.1", "foldhash 0.2.0", - "getrandom 0.3.1", + "getrandom 0.3.4", "hashbrown 0.16.0", - "indexmap 2.8.0", + "indexmap 2.12.0", "itoa", "k256 0.13.4", "keccak-asm", "paste", "proptest", "proptest-derive", - "rand 0.9.0", + "rand 0.9.2", "ruint", "rustc-hash 2.1.1", "serde", @@ -325,7 +336,7 @@ checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -345,14 +356,14 @@ dependencies = [ "itertools 0.14.0", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] name = "alloy-serde" -version = "1.0.42" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "596cfa360922ba9af901cc7370c68640e4f72adb6df0ab064de32f21fec498d7" +checksum = "751d1887f7d202514a82c5b3caf28ee8bd4a2ad9549e4f498b6f0bff99b52add" dependencies = [ "alloy-primitives", "serde", @@ -370,7 +381,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -382,11 +393,11 @@ dependencies = [ "alloy-sol-macro-input", "const-hex", "heck 0.5.0", - "indexmap 2.8.0", + "indexmap 2.12.0", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", "syn-solidity", "tiny-keccak", ] @@ -403,7 +414,7 @@ dependencies = [ "macro-string", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", "syn-solidity", ] @@ -414,7 +425,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "954d1b2533b9b2c7959652df3076954ecb1122a28cc740aa84e7b0a49f6ac0a9" dependencies = [ "serde", - "winnow", + "winnow 0.7.13", ] [[package]] @@ -447,22 +458,16 @@ dependencies = [ [[package]] name = "alloy-tx-macros" -version = "1.0.42" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab54221eccefa254ce9f65b079c097b1796e48c21c7ce358230f8988d75392fb" +checksum = "cd7ce8ed34106acd6e21942022b6a15be6454c2c3ead4d76811d3bdcd63cf771" dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -478,11 +483,20 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + [[package]] name = "anstream" -version = "0.6.18" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -495,50 +509,50 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.7" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", - "once_cell", - "windows-sys 0.59.0", + "once_cell_polyfill", + "windows-sys 0.60.2", ] [[package]] name = "anyhow" -version = "1.0.97" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "arbitrary" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" dependencies = [ "derive_arbitrary", ] @@ -569,7 +583,7 @@ dependencies = [ "ark-serialize 0.3.0", "ark-std 0.3.0", "derivative", - "num-bigint", + "num-bigint 0.4.6", "num-traits", "paste", "rustc_version 0.3.3", @@ -589,7 +603,7 @@ dependencies = [ "derivative", "digest 0.10.7", "itertools 0.10.5", - "num-bigint", + "num-bigint 0.4.6", "num-traits", "paste", "rustc_version 0.4.1", @@ -610,7 +624,7 @@ dependencies = [ "digest 0.10.7", "educe", "itertools 0.13.0", - "num-bigint", + "num-bigint 0.4.6", "num-traits", "paste", "zeroize", @@ -643,7 +657,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -652,7 +666,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" dependencies = [ - "num-bigint", + "num-bigint 0.4.6", "num-traits", "quote", "syn 1.0.109", @@ -664,7 +678,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" dependencies = [ - "num-bigint", + "num-bigint 0.4.6", "num-traits", "proc-macro2", "quote", @@ -677,11 +691,11 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" dependencies = [ - "num-bigint", + "num-bigint 0.4.6", "num-traits", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -702,7 +716,7 @@ checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ "ark-std 0.4.0", "digest 0.10.7", - "num-bigint", + "num-bigint 0.4.6", ] [[package]] @@ -714,7 +728,7 @@ dependencies = [ "ark-std 0.5.0", "arrayvec", "digest 0.10.7", - "num-bigint", + "num-bigint 0.4.6", ] [[package]] @@ -780,7 +794,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", ] @@ -792,7 +806,7 @@ checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", "synstructure", ] @@ -804,7 +818,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -836,9 +850,9 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" dependencies = [ "concurrent-queue", "event-listener-strategy", @@ -848,32 +862,20 @@ dependencies = [ [[package]] name = "async-io" -version = "2.4.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" dependencies = [ - "async-lock", + "autocfg", "cfg-if", "concurrent-queue", "futures-io", "futures-lite", "parking", "polling", - "rustix 0.38.44", + "rustix 1.1.2", "slab", - "tracing", - "windows-sys 0.59.0", -] - -[[package]] -name = "async-lock" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" -dependencies = [ - "event-listener 5.4.0", - "event-listener-strategy", - "pin-project-lite", + "windows-sys 0.61.2", ] [[package]] @@ -895,18 +897,18 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] name = "async-trait" -version = "0.1.87" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d556ec1359574147ec0c4fc5eb525f3f23263a592b1a9c07e0a75b427de55c97" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -946,7 +948,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16e2cdb6d5ed835199484bb92bb8b3edd526effe995c61732580439c1a67e2e9" dependencies = [ "base64 0.22.1", - "http 1.3.0", + "http 1.3.1", "log", "url", ] @@ -965,20 +967,20 @@ dependencies = [ [[package]] name = "auto_impl" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e12882f59de5360c748c4cbf569a042d5fb0eb515f7bea9c1f470b47f6ffbd73" +checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "axum" @@ -990,10 +992,10 @@ dependencies = [ "axum-core", "bytes", "futures-util", - "http 1.3.0", + "http 1.3.1", "http-body 1.0.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.8.0", "hyper-util", "itoa", "matchit", @@ -1023,7 +1025,7 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http 1.3.0", + "http 1.3.1", "http-body 1.0.1", "http-body-util", "mime", @@ -1037,9 +1039,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" dependencies = [ "addr2line", "cfg-if", @@ -1047,7 +1049,8 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-targets 0.52.6", + "serde", + "windows-link", ] [[package]] @@ -1068,6 +1071,16 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base256emoji" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e9430d9a245a77c92176e649af6e275f20839a48389859d1661e9a128d077c" +dependencies = [ + "const-str", + "match-lookup", +] + [[package]] name = "base58" version = "0.1.0" @@ -1110,9 +1123,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb97d56060ee67d285efb8001fec9d2a4c710c32efd2e14b5cbb5ba71930fc2d" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] name = "beacon_chain" @@ -1149,9 +1162,9 @@ dependencies = [ "once_cell", "oneshot_broadcast", "operation_pool", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "proto_array", - "rand 0.9.0", + "rand 0.9.2", "rayon", "safe_arith", "sensitive_url", @@ -1163,7 +1176,7 @@ dependencies = [ "ssz_types", "state_processing", "store", - "strum", + "strum 0.24.1", "superstruct", "task_executor", "tempfile", @@ -1194,7 +1207,7 @@ dependencies = [ "genesis", "hex", "http_api", - "hyper 1.6.0", + "hyper 1.8.0", "lighthouse_network", "monitoring_api", "network_utils", @@ -1203,7 +1216,7 @@ dependencies = [ "serde_json", "slasher", "store", - "strum", + "strum 0.24.1", "task_executor", "tracing", "types", @@ -1221,7 +1234,7 @@ dependencies = [ "sensitive_url", "serde", "slot_clock", - "strum", + "strum 0.24.1", "task_executor", "tokio", "tracing", @@ -1241,10 +1254,10 @@ dependencies = [ "logging", "metrics", "num_cpus", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "serde", "slot_clock", - "strum", + "strum 0.24.1", "task_executor", "tokio", "tokio-util", @@ -1273,7 +1286,7 @@ version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.10.0", "cexpr", "clang-sys", "itertools 0.12.1", @@ -1286,7 +1299,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.100", + "syn 2.0.110", "which", ] @@ -1329,9 +1342,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "bitvec" @@ -1364,6 +1377,30 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "blake2b_simd" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq 0.3.1", +] + +[[package]] +name = "blake3" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq 0.3.1", +] + [[package]] name = "block-buffer" version = "0.7.3" @@ -1382,7 +1419,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", ] [[package]] @@ -1391,7 +1428,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", ] [[package]] @@ -1403,6 +1440,15 @@ dependencies = [ "byte-tools", ] +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", +] + [[package]] name = "bls" version = "0.2.0" @@ -1415,13 +1461,26 @@ dependencies = [ "ethereum_ssz", "fixed_bytes", "hex", - "rand 0.9.0", + "rand 0.9.2", "safe_arith", "serde", "tree_hash", "zeroize", ] +[[package]] +name = "bls12_381" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3c196a77437e7cc2fb515ce413a6401291578b5afc8ecb29a3c7ab957f05941" +dependencies = [ + "ff 0.12.1", + "group 0.12.1", + "pairing 0.22.0", + "rand_core 0.6.4", + "subtle", +] + [[package]] name = "blst" version = "0.3.16" @@ -1444,7 +1503,7 @@ dependencies = [ "byte-slice-cast", "ff 0.13.1", "group 0.13.0", - "pairing", + "pairing 0.23.0", "rand_core 0.6.4", "serde", "subtle", @@ -1504,9 +1563,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.17.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "byte-slice-cast" @@ -1520,6 +1579,26 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" +[[package]] +name = "bytemuck" +version = "1.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.110", +] + [[package]] name = "byteorder" version = "1.5.0" @@ -1572,11 +1651,11 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.9" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" +checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -1596,10 +1675,10 @@ checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" dependencies = [ "camino", "cargo-platform", - "semver 1.0.26", + "semver 1.0.27", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -1608,12 +1687,32 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" +[[package]] +name = "cbindgen" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fce8dd7fcfcbf3a0a87d8f515194b49d6135acab73e18bd380d1d93bb1a15eb" +dependencies = [ + "clap", + "heck 0.4.1", + "indexmap 2.12.0", + "log", + "proc-macro2", + "quote", + "serde", + "serde_json", + "syn 2.0.110", + "tempfile", + "toml", +] + [[package]] name = "cc" -version = "1.2.16" +version = "1.2.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" +checksum = "35900b6c8d709fb1d854671ae27aeaa9eec2f8b01b364e1619a40da3e6fe2afe" dependencies = [ + "find-msvc-tools", "jobserver", "libc", "shlex", @@ -1630,9 +1729,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" @@ -1666,14 +1765,14 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.40" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", + "serde", "wasm-bindgen", "windows-link", ] @@ -1711,7 +1810,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", ] [[package]] @@ -1738,9 +1837,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.32" +version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6088f3ae8c3608d19260cd7445411865a485688711b78b5be70d78cd96136f83" +checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" dependencies = [ "clap_builder", "clap_derive", @@ -1748,9 +1847,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.32" +version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22a7ef7f676155edfb82daa97f99441f3ebf4a58d5e32f295a56259f1b6facc8" +checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a" dependencies = [ "anstream", "anstyle", @@ -1761,21 +1860,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.32" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] name = "clap_lex" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] name = "clap_utils" @@ -1818,7 +1917,7 @@ dependencies = [ "network", "operation_pool", "proof_generation_service", - "rand 0.9.0", + "rand 0.9.2", "sensitive_url", "serde", "serde_json", @@ -1857,12 +1956,12 @@ dependencies = [ "bs58 0.4.0", "coins-core", "digest 0.10.7", - "getrandom 0.2.15", + "getrandom 0.2.16", "hmac 0.12.1", "k256 0.11.6", "lazy_static", "serde", - "sha2 0.10.8", + "sha2 0.10.9", "thiserror 1.0.69", ] @@ -1874,12 +1973,12 @@ checksum = "2a11892bcac83b4c6e95ab84b5b06c76d9d70ad73548dd07418269c5c7977171" dependencies = [ "bitvec 0.17.4", "coins-bip32", - "getrandom 0.2.15", + "getrandom 0.2.16", "hex", "hmac 0.12.1", "pbkdf2 0.11.0", "rand 0.8.5", - "sha2 0.10.8", + "sha2 0.10.9", "thiserror 1.0.69", ] @@ -1894,21 +1993,21 @@ dependencies = [ "bech32", "blake2", "digest 0.10.7", - "generic-array 0.14.7", + "generic-array 0.14.9", "hex", "ripemd", "serde", "serde_derive", - "sha2 0.10.8", + "sha2 0.10.9", "sha3", "thiserror 1.0.69", ] [[package]] name = "colorchoice" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "colored" @@ -1989,15 +2088,14 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.14.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0485bab839b018a8f1723fc5391819fea5f8f0f32288ef8a735fd096b6160c" +checksum = "3bb320cac8a0750d7f25280aa97b09c26edfe161164238ecbbb31092b079e735" dependencies = [ "cfg-if", "cpufeatures", - "hex", "proptest", - "serde", + "serde_core", ] [[package]] @@ -2006,11 +2104,17 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const-str" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" + [[package]] name = "const_format" -version = "0.2.34" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" dependencies = [ "const_format_proc_macros", ] @@ -2032,6 +2136,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + [[package]] name = "context_deserialize" version = "0.1.0" @@ -2103,6 +2213,16 @@ dependencies = [ "memchr", ] +[[package]] +name = "cpu-time" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e393a7668fe1fad3075085b86c781883000b4ede868f43627b34a87c8b7ded" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "cpufeatures" version = "0.2.17" @@ -2114,9 +2234,9 @@ dependencies = [ [[package]] name = "crc" -version = "3.2.1" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" dependencies = [ "crc-catalog", ] @@ -2129,9 +2249,9 @@ checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] @@ -2178,6 +2298,19 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + [[package]] name = "crossbeam-channel" version = "0.5.15" @@ -2206,6 +2339,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.21" @@ -2214,9 +2356,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-bigint" @@ -2224,7 +2366,7 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", "rand_core 0.6.4", "subtle", "zeroize", @@ -2236,7 +2378,7 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", "rand_core 0.6.4", "subtle", "zeroize", @@ -2248,7 +2390,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", "rand_core 0.6.4", "typenum", ] @@ -2259,10 +2401,31 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25fab6889090c8133f3deb8f73ba3c65a7f456f66436fc012a1b1e272b1e103e" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", "subtle", ] +[[package]] +name = "csv" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde_core", +] + +[[package]] +name = "csv-core" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" +dependencies = [ + "memchr", +] + [[package]] name = "ctr" version = "0.8.0" @@ -2283,12 +2446,13 @@ dependencies = [ [[package]] name = "ctrlc" -version = "3.4.5" +version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90eeab0aa92f3f9b4e87f258c72b139c207d251f9cbc1080a0086b86a8870dd3" +checksum = "73736a89c4aff73035ba2ed2e565061954da00d4970fc9ac25dcc85a2a20d790" dependencies = [ - "nix 0.29.0", - "windows-sys 0.59.0", + "dispatch2", + "nix 0.30.1", + "windows-sys 0.61.2", ] [[package]] @@ -2315,7 +2479,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -2330,12 +2494,12 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ - "darling_core 0.20.10", - "darling_macro 0.20.10", + "darling_core 0.20.11", + "darling_macro 0.20.11", ] [[package]] @@ -2364,16 +2528,16 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -2388,7 +2552,7 @@ dependencies = [ "quote", "serde", "strsim 0.11.1", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -2404,13 +2568,13 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ - "darling_core 0.20.10", + "darling_core 0.20.11", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -2421,7 +2585,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -2445,59 +2609,151 @@ dependencies = [ ] [[package]] -name = "data-encoding" -version = "2.8.0" +name = "dashmap" +version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core 0.9.12", +] [[package]] -name = "data-encoding-macro" -version = "0.1.17" +name = "dashu" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f9724adfcf41f45bf652b3995837669d73c4d49a1b5ac1ff82905ac7d9b5558" +checksum = "85b3e5ac1e23ff1995ef05b912e2b012a8784506987a2651552db2c73fb3d7e0" dependencies = [ - "data-encoding", - "data-encoding-macro-internal", + "dashu-base", + "dashu-float", + "dashu-int", + "dashu-macros", + "dashu-ratio", + "rustversion", ] [[package]] -name = "data-encoding-macro-internal" -version = "0.1.15" +name = "dashu-base" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b80bf6b85aa68c58ffea2ddb040109943049ce3fbdf4385d0380aef08ef289" + +[[package]] +name = "dashu-float" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18e4fdb82bd54a12e42fb58a800dcae6b9e13982238ce2296dc3570b92148e1f" +checksum = "85078445a8dbd2e1bd21f04a816f352db8d333643f0c9b78ca7c3d1df71063e7" dependencies = [ - "data-encoding", - "syn 2.0.100", + "dashu-base", + "dashu-int", + "num-modular", + "num-order", + "rustversion", + "static_assertions", ] [[package]] -name = "database_manager" -version = "0.1.0" +name = "dashu-int" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee99d08031ca34a4d044efbbb21dff9b8c54bb9d8c82a189187c0651ffdb9fbf" dependencies = [ - "beacon_chain", - "beacon_node", - "clap", - "clap_utils", - "environment", - "hex", - "serde", - "store", - "strum", - "tracing", - "types", + "cfg-if", + "dashu-base", + "num-modular", + "num-order", + "rustversion", + "static_assertions", ] [[package]] -name = "db-key" -version = "0.0.5" +name = "dashu-macros" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b72465f46d518f6015d9cf07f7f3013a95dd6b9c2747c3d65ae0cce43929d14f" +checksum = "93381c3ef6366766f6e9ed9cf09e4ef9dec69499baf04f0c60e70d653cf0ab10" +dependencies = [ + "dashu-base", + "dashu-float", + "dashu-int", + "dashu-ratio", + "paste", + "proc-macro2", + "quote", + "rustversion", +] [[package]] -name = "delay_map" -version = "0.4.0" +name = "dashu-ratio" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df941644b671f05f59433e481ba0d31ac10e3667de725236a4c0d587c496fba1" +checksum = "47e33b04dd7ce1ccf8a02a69d3419e354f2bbfdf4eb911a0b7465487248764c9" +dependencies = [ + "dashu-base", + "dashu-float", + "dashu-int", + "num-modular", + "num-order", + "rustversion", +] + +[[package]] +name = "data-encoding" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" + +[[package]] +name = "data-encoding-macro" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d" +dependencies = [ + "data-encoding", + "data-encoding-macro-internal", +] + +[[package]] +name = "data-encoding-macro-internal" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" +dependencies = [ + "data-encoding", + "syn 2.0.110", +] + +[[package]] +name = "database_manager" +version = "0.1.0" +dependencies = [ + "beacon_chain", + "beacon_node", + "clap", + "clap_utils", + "environment", + "hex", + "serde", + "store", + "strum 0.24.1", + "tracing", + "types", +] + +[[package]] +name = "db-key" +version = "0.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b72465f46d518f6015d9cf07f7f3013a95dd6b9c2747c3d65ae0cce43929d14f" + +[[package]] +name = "delay_map" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88e365f083a5cb5972d50ce8b1b2c9f125dc5ec0f50c0248cfb568ae59efcf0b" dependencies = [ "futures", "tokio", @@ -2532,11 +2788,12 @@ dependencies = [ [[package]] name = "der" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ "const-oid", + "pem-rfc7468", "zeroize", ] @@ -2549,18 +2806,19 @@ dependencies = [ "asn1-rs", "displaydoc", "nom", - "num-bigint", + "num-bigint 0.4.6", "num-traits", "rusticata-macros", ] [[package]] name = "deranged" -version = "0.3.11" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" dependencies = [ "powerfmt", + "serde_core", ] [[package]] @@ -2576,26 +2834,26 @@ dependencies = [ [[package]] name = "derive_arbitrary" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" +checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] name = "derive_more" -version = "0.99.19" +version = "0.99.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da29a38df43d6f156149c9b43ded5e018ddff2a855cf2cfd62e8cd7d079c69f" +checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" dependencies = [ "convert_case 0.4.0", "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -2624,7 +2882,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -2635,7 +2893,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", "unicode-xid", ] @@ -2654,7 +2912,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", ] [[package]] @@ -2700,9 +2958,9 @@ dependencies = [ [[package]] name = "discv5" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a20b702c8491b3325866a4935d0b5101e49144d74540384243b6293794aad6fa" +checksum = "f170f4f6ed0e1df52bf43b403899f0081917ecf1500bfe312505cc3b515a8899" dependencies = [ "aes 0.8.4", "aes-gcm", @@ -2721,16 +2979,28 @@ dependencies = [ "lru", "more-asserts", "multiaddr", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "rand 0.8.5", "smallvec", - "socket2", + "socket2 0.5.10", "tokio", "tracing", "uint 0.10.0", "zeroize", ] +[[package]] +name = "dispatch2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +dependencies = [ + "bitflags 2.10.0", + "block2", + "libc", + "objc2", +] + [[package]] name = "displaydoc" version = "0.2.5" @@ -2739,7 +3009,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -2751,7 +3021,7 @@ dependencies = [ "eth2", "futures", "logging", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "slot_clock", "task_executor", "tokio", @@ -2766,6 +3036,12 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + [[package]] name = "dtoa" version = "1.0.10" @@ -2794,6 +3070,12 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + [[package]] name = "ecdsa" version = "0.14.8" @@ -2812,7 +3094,7 @@ version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ - "der 0.7.9", + "der 0.7.10", "digest 0.10.7", "elliptic-curve 0.13.8", "rfc6979 0.4.0", @@ -2833,15 +3115,15 @@ dependencies = [ [[package]] name = "ed25519-dalek" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" dependencies = [ "curve25519-dalek", "ed25519", "rand_core 0.6.4", "serde", - "sha2 0.10.8", + "sha2 0.10.9", "subtle", "zeroize", ] @@ -2855,7 +3137,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -2906,7 +3188,7 @@ dependencies = [ "itertools 0.14.0", "serde", "serde_json", - "sha2 0.10.8", + "sha2 0.10.9", ] [[package]] @@ -2940,7 +3222,7 @@ dependencies = [ "blstrs", "ff 0.13.1", "group 0.13.0", - "pairing", + "pairing 0.23.0", "subtle", ] @@ -2969,7 +3251,7 @@ dependencies = [ "ekzg-bls12-381", "ekzg-maybe-rayon", "ekzg-polynomial", - "sha2 0.10.8", + "sha2 0.10.9", ] [[package]] @@ -3016,6 +3298,12 @@ dependencies = [ "serde_json", ] +[[package]] +name = "elf" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" + [[package]] name = "elliptic-curve" version = "0.12.3" @@ -3027,7 +3315,7 @@ dependencies = [ "der 0.6.1", "digest 0.10.7", "ff 0.12.1", - "generic-array 0.14.7", + "generic-array 0.14.9", "group 0.12.1", "pkcs8 0.9.0", "rand_core 0.6.4", @@ -3046,8 +3334,10 @@ dependencies = [ "crypto-bigint 0.5.5", "digest 0.10.7", "ff 0.13.1", - "generic-array 0.14.7", + "generic-array 0.14.9", "group 0.13.0", + "hkdf", + "pem-rfc7468", "pkcs8 0.10.2", "rand_core 0.6.4", "sec1 0.7.3", @@ -3093,27 +3383,58 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", +] + +[[package]] +name = "enum-map" +version = "2.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" +dependencies = [ + "enum-map-derive", + "serde", +] + +[[package]] +name = "enum-map-derive" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.110", ] [[package]] name = "enum-ordinalize" -version = "4.3.0" +version = "4.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" +checksum = "4a1091a7bb1f8f2c4b28f1fe2cef4980ca2d410a3d727d67ecc3178c9b0800f0" dependencies = [ "enum-ordinalize-derive", ] [[package]] name = "enum-ordinalize-derive" -version = "4.3.1" +version = "4.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" +checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", +] + +[[package]] +name = "env_filter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" +dependencies = [ + "log", + "regex", ] [[package]] @@ -3126,6 +3447,19 @@ dependencies = [ "regex", ] +[[package]] +name = "env_logger" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "jiff", + "log", +] + [[package]] name = "environment" version = "0.1.2" @@ -3156,12 +3490,12 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.10" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3180,7 +3514,7 @@ dependencies = [ "scrypt 0.10.0", "serde", "serde_json", - "sha2 0.10.8", + "sha2 0.10.9", "sha3", "thiserror 1.0.69", "uuid 0.8.2", @@ -3205,7 +3539,7 @@ dependencies = [ "multiaddr", "pretty_reqwest_error", "proto_array", - "rand 0.9.0", + "rand 0.9.2", "reqwest 0.11.27", "reqwest-eventsource", "sensitive_url", @@ -3234,7 +3568,7 @@ dependencies = [ "bls", "ethereum_hashing", "hex", - "num-bigint", + "num-bigint 0.4.6", "serde", "serde_yaml", ] @@ -3261,7 +3595,7 @@ dependencies = [ "hex", "hmac 0.11.0", "pbkdf2 0.8.0", - "rand 0.9.0", + "rand 0.9.2", "scrypt 0.7.0", "serde", "serde_json", @@ -3302,7 +3636,7 @@ dependencies = [ "eth2_key_derivation", "eth2_keystore", "hex", - "rand 0.9.0", + "rand 0.9.2", "serde", "serde_json", "serde_repr", @@ -3376,7 +3710,7 @@ checksum = "c853bd72c9e5787f8aafc3df2907c2ed03cff3150c3acd94e2e53a98ab70a8ab" dependencies = [ "cpufeatures", "ring", - "sha2 0.10.8", + "sha2 0.10.9", ] [[package]] @@ -3394,9 +3728,9 @@ dependencies = [ [[package]] name = "ethereum_ssz" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ca8ba45b63c389c6e115b095ca16381534fdcc03cf58176a3f8554db2dbe19b" +checksum = "0dcddb2554d19cde19b099fadddde576929d7a4d0c1cd3512d1fd95cf174375c" dependencies = [ "alloy-primitives", "arbitrary", @@ -3410,14 +3744,14 @@ dependencies = [ [[package]] name = "ethereum_ssz_derive" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd55d08012b4e0dfcc92b8d6081234df65f2986ad34cc76eeed69c5e2ce7506" +checksum = "a657b6b3b7e153637dc6bdc6566ad9279d9ee11a15b12cfb24a2e04360637e9f" dependencies = [ - "darling 0.20.10", + "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -3449,7 +3783,7 @@ dependencies = [ "convert_case 0.6.0", "elliptic-curve 0.12.3", "ethabi", - "generic-array 0.14.7", + "generic-array 0.14.9", "hex", "k256 0.11.6", "open-fastrlp", @@ -3459,7 +3793,7 @@ dependencies = [ "rlp-derive", "serde", "serde_json", - "strum", + "strum 0.24.1", "syn 1.0.109", "thiserror 1.0.69", "tiny-keccak", @@ -3473,9 +3807,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9713f525348e5dde025d09b0a4217429f8074e8ff22c886263cc191e87d8216" dependencies = [ "ethers-core", - "getrandom 0.2.15", + "getrandom 0.2.16", "reqwest 0.11.27", - "semver 1.0.26", + "semver 1.0.27", "serde", "serde-aux", "serde_json", @@ -3516,13 +3850,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1a9e0597aa6b2fdc810ff58bc95e4eeaa2c219b3e615ed025106ecb027407d8" dependencies = [ "async-trait", - "auto_impl 1.2.1", + "auto_impl 1.3.0", "base64 0.13.1", "ethers-core", "futures-core", "futures-timer", "futures-util", - "getrandom 0.2.15", + "getrandom 0.2.16", "hashers", "hex", "http 0.2.12", @@ -3558,7 +3892,7 @@ dependencies = [ "ethers-core", "hex", "rand 0.8.5", - "sha2 0.10.8", + "sha2 0.10.9", "thiserror 1.0.69", ] @@ -3570,9 +3904,9 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "event-listener" -version = "5.4.0" +version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" dependencies = [ "concurrent-queue", "parking", @@ -3581,11 +3915,11 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ - "event-listener 5.4.0", + "event-listener 5.4.1", "pin-project-lite", ] @@ -3651,9 +3985,9 @@ dependencies = [ "logging", "lru", "metrics", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "pretty_reqwest_error", - "rand 0.9.0", + "rand 0.9.2", "reqwest 0.11.27", "sensitive_url", "serde", @@ -3662,7 +3996,7 @@ dependencies = [ "slot_clock", "ssz_types", "state_processing", - "strum", + "strum 0.24.1", "superstruct", "task_executor", "tempfile", @@ -3677,6 +4011,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + [[package]] name = "fake-simd" version = "0.1.2" @@ -3708,7 +4052,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" dependencies = [ "arrayvec", - "auto_impl 1.2.1", + "auto_impl 1.3.0", "bytes", ] @@ -3719,7 +4063,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" dependencies = [ "arrayvec", - "auto_impl 1.2.1", + "auto_impl 1.3.0", "bytes", ] @@ -3739,6 +4083,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" dependencies = [ + "bitvec 1.0.1", "rand_core 0.6.4", "subtle", ] @@ -3750,10 +4095,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" dependencies = [ "bitvec 1.0.1", + "byteorder", + "ff_derive", "rand_core 0.6.4", "subtle", ] +[[package]] +name = "ff_derive" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f10d12652036b0e99197587c6ba87a8fc3031986499973c030d8b44fcc151b60" +dependencies = [ + "addchain", + "num-bigint 0.3.3", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "ffi-opaque" version = "2.0.1" @@ -3776,6 +4138,16 @@ dependencies = [ "rustc_version 0.4.1", ] +[[package]] +name = "fields" +version = "0.12.0" +source = "git+https://github.com/0xPolygonHermez/pil2-proofman.git?tag=v0.12.0#3e8a367a50193803b09a6d2d272d9ab01129ad44" +dependencies = [ + "num-bigint 0.4.6", + "paste", + "serde", +] + [[package]] name = "filesystem" version = "0.1.0" @@ -3784,6 +4156,12 @@ dependencies = [ "windows-acl", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" + [[package]] name = "fixed-hash" version = "0.8.0" @@ -3806,9 +4184,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.1.0" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc" +checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" dependencies = [ "crc32fast", "libz-sys", @@ -3823,9 +4201,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "foldhash" @@ -3868,9 +4246,9 @@ dependencies = [ [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] @@ -3958,9 +4336,9 @@ checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" dependencies = [ "futures-core", "pin-project-lite", @@ -3984,7 +4362,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -3994,7 +4372,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" dependencies = [ "futures-io", - "rustls 0.23.23", + "rustls 0.23.35", "rustls-pki-types", ] @@ -4044,17 +4422,10 @@ dependencies = [ ] [[package]] -name = "generator" -version = "0.8.4" +name = "gcd" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6bd114ceda131d3b1d665eba35788690ad37f5916457286b32ab6fd3c438dd" -dependencies = [ - "cfg-if", - "libc", - "log", - "rustversion", - "windows 0.58.0", -] +checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" [[package]] name = "generic-array" @@ -4067,15 +4438,26 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "typenum", "version_check", "zeroize", ] +[[package]] +name = "generic-array" +version = "1.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaf57c49a95fd1fe24b90b3033bee6dc7e8f1288d51494cb44e627c295e38542" +dependencies = [ + "rustversion", + "serde_core", + "typenum", +] + [[package]] name = "genesis" version = "0.2.0" @@ -4093,27 +4475,29 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.1" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", + "js-sys", "libc", - "wasi 0.13.3+wasi-0.2.2", - "windows-targets 0.52.6", + "r-efi", + "wasip2", + "wasm-bindgen", ] [[package]] @@ -4128,15 +4512,15 @@ dependencies = [ [[package]] name = "gimli" -version = "0.31.1" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" [[package]] name = "glob" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "graffiti_file" @@ -4157,6 +4541,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" dependencies = [ "ff 0.12.1", + "memuse", "rand_core 0.6.4", "subtle", ] @@ -4176,9 +4561,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" dependencies = [ "bytes", "fnv", @@ -4186,7 +4571,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.8.0", + "indexmap 2.12.0", "slab", "tokio", "tokio-util", @@ -4195,17 +4580,17 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.8" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" dependencies = [ "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "http 1.3.0", - "indexmap 2.8.0", + "http 1.3.1", + "indexmap 2.12.0", "slab", "tokio", "tokio-util", @@ -4214,12 +4599,80 @@ dependencies = [ [[package]] name = "half" -version = "2.4.1" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ "cfg-if", "crunchy", + "zerocopy", +] + +[[package]] +name = "halo2" +version = "0.1.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a23c779b38253fe1538102da44ad5bd5378495a61d2c4ee18d64eaa61ae5995" +dependencies = [ + "halo2_proofs", +] + +[[package]] +name = "halo2_proofs" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e925780549adee8364c7f2b685c753f6f3df23bde520c67416e93bf615933760" +dependencies = [ + "blake2b_simd", + "ff 0.12.1", + "group 0.12.1", + "pasta_curves 0.4.1", + "rand_core 0.6.4", + "rayon", +] + +[[package]] +name = "halo2curves" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d380afeef3f1d4d3245b76895172018cfb087d9976a7cabcd5597775b2933e07" +dependencies = [ + "blake2", + "digest 0.10.7", + "ff 0.13.1", + "group 0.13.0", + "halo2derive", + "hex", + "lazy_static", + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "pairing 0.23.0", + "pasta_curves 0.5.1", + "paste", + "rand 0.8.5", + "rand_core 0.6.4", + "rayon", + "serde", + "serde_arrays", + "sha2 0.10.9", + "static_assertions", + "subtle", + "unroll", +] + +[[package]] +name = "halo2derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb99e7492b4f5ff469d238db464131b86c2eaac814a78715acba369f64d2c76" +dependencies = [ + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -4251,17 +4704,18 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash", "allocator-api2", + "serde", ] [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", - "foldhash 0.1.4", + "foldhash 0.1.5", ] [[package]] @@ -4307,7 +4761,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "hashbrown 0.15.2", + "hashbrown 0.15.5", ] [[package]] @@ -4377,15 +4831,9 @@ checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hermit-abi" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" - -[[package]] -name = "hermit-abi" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbd780fe5cc30f81464441920d82ac8740e2e46b29a6fad543ddd075229ce37e" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "hex" @@ -4427,10 +4875,10 @@ dependencies = [ "idna", "ipnet", "once_cell", - "rand 0.9.0", + "rand 0.9.2", "ring", - "socket2", - "thiserror 2.0.12", + "socket2 0.5.10", + "thiserror 2.0.17", "tinyvec", "tokio", "tracing", @@ -4449,11 +4897,11 @@ dependencies = [ "ipconfig", "moka", "once_cell", - "parking_lot 0.12.3", - "rand 0.9.0", + "parking_lot 0.12.5", + "rand 0.9.2", "resolv-conf", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tracing", ] @@ -4488,22 +4936,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "hostname" -version = "0.3.1" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" dependencies = [ - "libc", - "match_cfg", - "winapi", + "windows-sys 0.61.2", ] [[package]] @@ -4519,9 +4956,9 @@ dependencies = [ [[package]] name = "http" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a761d192fbf18bdef69f5ceedd0d1333afcbda0ee23840373b8317570d23c65" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" dependencies = [ "bytes", "fnv", @@ -4546,7 +4983,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.3.0", + "http 1.3.1", ] [[package]] @@ -4557,7 +4994,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.3.0", + "http 1.3.1", "http-body 1.0.1", "pin-project-lite", ] @@ -4589,9 +5026,9 @@ dependencies = [ "network", "network_utils", "operation_pool", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "proto_array", - "rand 0.9.0", + "rand 0.9.2", "safe_arith", "sensitive_url", "serde", @@ -4599,7 +5036,7 @@ dependencies = [ "slot_clock", "state_processing", "store", - "sysinfo", + "sysinfo 0.26.9", "system_health", "task_executor", "tokio", @@ -4648,9 +5085,18 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" -version = "2.1.0" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" + +[[package]] +name = "hybrid-array" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "f2d35805454dc9f8662a98d6d61886ffe26bd465f5960e0e55345c70d5c0d2a9" +dependencies = [ + "typenum", +] [[package]] name = "hyper" @@ -4662,14 +5108,14 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.3.26", + "h2 0.3.27", "http 0.2.12", "http-body 0.4.6", "httparse", "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.5.10", "tokio", "tower-service", "tracing", @@ -4678,20 +5124,22 @@ dependencies = [ [[package]] name = "hyper" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "1744436df46f0bde35af3eda22aeaba453aada65d8f1c171cd8a5f59030bd69f" dependencies = [ + "atomic-waker", "bytes", "futures-channel", - "futures-util", - "h2 0.4.8", - "http 1.3.0", + "futures-core", + "h2 0.4.12", + "http 1.3.1", "http-body 1.0.1", "httparse", "httpdate", "itoa", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", @@ -4717,7 +5165,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper 1.6.0", + "hyper 1.8.0", "hyper-util", "pin-project-lite", "tokio", @@ -4739,18 +5187,23 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.10" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" dependencies = [ + "base64 0.22.1", "bytes", "futures-channel", + "futures-core", "futures-util", - "http 1.3.0", + "http 1.3.1", "http-body 1.0.1", - "hyper 1.6.0", + "hyper 1.8.0", + "ipnet", + "libc", + "percent-encoding", "pin-project-lite", - "socket2", + "socket2 0.6.1", "tokio", "tower-service", "tracing", @@ -4758,16 +5211,17 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.61" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", - "windows-core 0.52.0", + "windows-core 0.62.2", ] [[package]] @@ -4781,21 +5235,22 @@ dependencies = [ [[package]] name = "icu_collections" -version = "1.5.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", + "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "icu_locale_core" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", @@ -4804,99 +5259,61 @@ dependencies = [ "zerovec", ] -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" - [[package]] name = "icu_normalizer" -version = "1.5.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", "icu_provider", "smallvec", - "utf16_iter", - "utf8_iter", - "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "1.5.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "1.5.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" dependencies = [ - "displaydoc", "icu_collections", - "icu_locid_transform", + "icu_locale_core", "icu_properties_data", "icu_provider", - "tinystr", + "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "1.5.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" +checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" [[package]] name = "icu_provider" -version = "1.5.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", - "icu_locid", - "icu_provider_macros", - "stable_deref_trait", - "tinystr", + "icu_locale_core", "writeable", "yoke", "zerofrom", + "zerotrie", "zerovec", ] -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - [[package]] name = "ident_case" version = "1.0.1" @@ -4905,9 +5322,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -4916,9 +5333,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", @@ -4967,12 +5384,12 @@ dependencies = [ "attohttpc", "bytes", "futures", - "http 1.3.0", + "http 1.3.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.8.0", "hyper-util", "log", - "rand 0.9.0", + "rand 0.9.2", "tokio", "url", "xmltree", @@ -5013,9 +5430,15 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] +[[package]] +name = "indenter" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" + [[package]] name = "indexmap" version = "1.9.3" @@ -5024,18 +5447,20 @@ checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", + "serde", ] [[package]] name = "indexmap" -version = "2.8.0" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" dependencies = [ "arbitrary", "equivalent", - "hashbrown 0.15.2", + "hashbrown 0.16.0", "serde", + "serde_core", ] [[package]] @@ -5049,8 +5474,8 @@ dependencies = [ "filesystem", "lockfile", "metrics", - "parking_lot 0.12.3", - "rand 0.9.0", + "parking_lot 0.12.5", + "rand 0.9.2", "reqwest 0.11.27", "serde", "serde_json", @@ -5070,7 +5495,7 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", ] [[package]] @@ -5120,8 +5545,8 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "socket2", - "widestring 1.1.0", + "socket2 0.5.10", + "widestring 1.2.1", "windows-sys 0.48.0", "winreg", ] @@ -5132,22 +5557,32 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +[[package]] +name = "iri-string" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" +dependencies = [ + "memchr", + "serde", +] + [[package]] name = "is-terminal" -version = "0.4.16" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" +checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ - "hermit-abi 0.5.0", + "hermit-abi 0.5.2", "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -5191,20 +5626,45 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +[[package]] +name = "jiff" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49cce2b81f2098e7e3efc35bc2e0a6b7abec9d34128283d7a26fa8f32a6dbb35" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde_core", +] + +[[package]] +name = "jiff-static" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "980af8b43c3ad5d8d349ace167ec8170839f753a42d233ba19e08afe1850fa69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.110", +] + [[package]] name = "jobserver" -version = "0.1.32" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ + "getrandom 0.3.4", "libc", ] [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" dependencies = [ "once_cell", "wasm-bindgen", @@ -5225,6 +5685,20 @@ dependencies = [ "simple_asn1", ] +[[package]] +name = "jubjub" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a575df5f985fe1cd5b2b05664ff6accfc46559032b954529fd225a2168d27b0f" +dependencies = [ + "bitvec 1.0.1", + "bls12_381", + "ff 0.12.1", + "group 0.12.1", + "rand_core 0.6.4", + "subtle", +] + [[package]] name = "k256" version = "0.11.6" @@ -5234,7 +5708,7 @@ dependencies = [ "cfg-if", "ecdsa 0.14.8", "elliptic-curve 0.12.3", - "sha2 0.10.8", + "sha2 0.10.9", "sha3", ] @@ -5249,7 +5723,7 @@ dependencies = [ "elliptic-curve 0.13.8", "once_cell", "serdect", - "sha2 0.10.8", + "sha2 0.10.9", "signature 2.2.0", ] @@ -5380,25 +5854,25 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.175" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libloading" -version = "0.8.6" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-targets 0.52.6", + "windows-link", ] [[package]] name = "libm" -version = "0.2.11" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libmdbx" @@ -5407,11 +5881,11 @@ source = "git+https://github.com/sigp/libmdbx-rs?rev=e6ff4b9377c1619bcf0bfdf52be dependencies = [ "bitflags 1.3.2", "byteorder", - "derive_more 0.99.19", + "derive_more 0.99.20", "indexmap 1.9.3", "libc", "mdbx-sys", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "thiserror 1.0.69", ] @@ -5425,7 +5899,7 @@ dependencies = [ "either", "futures", "futures-timer", - "getrandom 0.2.15", + "getrandom 0.2.16", "libp2p-allow-block-list", "libp2p-connection-limits", "libp2p-core", @@ -5444,7 +5918,7 @@ dependencies = [ "multiaddr", "pin-project", "rw-stream-sink", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -5483,12 +5957,12 @@ dependencies = [ "multiaddr", "multihash", "multistream-select", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "pin-project", "quick-protobuf", "rand 0.8.5", "rw-stream-sink", - "thiserror 2.0.12", + "thiserror 2.0.17", "tracing", "unsigned-varint 0.8.0", "web-time", @@ -5505,7 +5979,7 @@ dependencies = [ "hickory-resolver", "libp2p-core", "libp2p-identity", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "smallvec", "tracing", ] @@ -5515,7 +5989,7 @@ name = "libp2p-gossipsub" version = "0.50.0" source = "git+https://github.com/sigp/rust-libp2p.git?rev=5acdf89a65d64098f9346efa5769e57bcd19dea9#5acdf89a65d64098f9346efa5769e57bcd19dea9" dependencies = [ - "async-channel 2.3.1", + "async-channel 2.5.0", "asynchronous-codec", "base64 0.22.1", "byteorder", @@ -5524,7 +5998,7 @@ dependencies = [ "fnv", "futures", "futures-timer", - "getrandom 0.2.15", + "getrandom 0.2.16", "hashlink 0.10.0", "hex_fmt", "libp2p-core", @@ -5535,7 +6009,7 @@ dependencies = [ "quick-protobuf-codec", "rand 0.8.5", "regex", - "sha2 0.10.8", + "sha2 0.10.9", "tracing", "web-time", ] @@ -5557,7 +6031,7 @@ dependencies = [ "quick-protobuf", "quick-protobuf-codec", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.17", "tracing", ] @@ -5575,8 +6049,8 @@ dependencies = [ "multihash", "quick-protobuf", "rand 0.8.5", - "sha2 0.10.8", - "thiserror 2.0.12", + "sha2 0.10.9", + "thiserror 2.0.17", "tracing", "zeroize", ] @@ -5595,7 +6069,7 @@ dependencies = [ "libp2p-swarm", "rand 0.8.5", "smallvec", - "socket2", + "socket2 0.5.10", "tokio", "tracing", ] @@ -5618,9 +6092,9 @@ dependencies = [ [[package]] name = "libp2p-mplex" -version = "0.43.0" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8aaa6fee3722e355443058472fc4705d78681bc2d8e447a0bdeb3fecf40cd197" +checksum = "95a4019ba30c4e42b776113e9778071691fe3f34bf23b6b3bf0dfcf29d801f3d" dependencies = [ "asynchronous-codec", "bytes", @@ -5628,7 +6102,7 @@ dependencies = [ "libp2p-core", "libp2p-identity", "nohash-hasher", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "rand 0.8.5", "smallvec", "tracing", @@ -5652,7 +6126,7 @@ dependencies = [ "rand 0.8.5", "snow", "static_assertions", - "thiserror 2.0.12", + "thiserror 2.0.17", "tracing", "x25519-dalek", "zeroize", @@ -5689,9 +6163,9 @@ dependencies = [ "quinn", "rand 0.8.5", "ring", - "rustls 0.23.23", - "socket2", - "thiserror 2.0.12", + "rustls 0.23.35", + "socket2 0.5.10", + "thiserror 2.0.17", "tokio", "tracing", ] @@ -5726,7 +6200,7 @@ checksum = "dd297cf53f0cb3dee4d2620bb319ae47ef27c702684309f682bdb7e55a18ae9c" dependencies = [ "heck 0.5.0", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -5740,7 +6214,7 @@ dependencies = [ "if-watch", "libc", "libp2p-core", - "socket2", + "socket2 0.5.10", "tokio", "tracing", ] @@ -5757,9 +6231,9 @@ dependencies = [ "libp2p-identity", "rcgen", "ring", - "rustls 0.23.23", - "rustls-webpki 0.103.4", - "thiserror 2.0.12", + "rustls 0.23.35", + "rustls-webpki 0.103.8", + "thiserror 2.0.17", "x509-parser", "yasna", ] @@ -5788,19 +6262,19 @@ dependencies = [ "either", "futures", "libp2p-core", - "thiserror 2.0.12", + "thiserror 2.0.17", "tracing", "yamux 0.12.1", - "yamux 0.13.4", + "yamux 0.13.8", ] [[package]] name = "libredox" -version = "0.1.3" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.10.0", "libc", ] @@ -5817,9 +6291,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.21" +version = "1.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df9b68e50e6e0b26f672573834882eb57759f6db9b3be2ea3c35c91188bb4eaa" +checksum = "15d118bbf3771060e7311cc7bb0545b01d08a8b4a7de949198dec1fa0ca1c0f7" dependencies = [ "cc", "pkg-config", @@ -5907,18 +6381,18 @@ dependencies = [ "lru_cache", "metrics", "network_utils", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "prometheus-client", "quickcheck", "quickcheck_macros", - "rand 0.9.0", + "rand 0.9.2", "regex", "serde", "sha2 0.9.9", "smallvec", "snap", "ssz_types", - "strum", + "strum 0.24.1", "superstruct", "task_executor", "tempfile", @@ -5947,7 +6421,7 @@ dependencies = [ "futures", "initialized_validators", "logging", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "serde", "signing_method", "slashing_protection", @@ -5981,15 +6455,15 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.9.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9c683daf087dc577b7506e9695b3d556a9f3849903fa28186283afd6809e9" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" -version = "0.7.5" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "lmdb-rkv" @@ -6014,23 +6488,22 @@ dependencies = [ [[package]] name = "local-ip-address" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3669cf5561f8d27e8fc84cc15e58350e70f557d4d65f70e3154e54cd2f8e1782" +checksum = "656b3b27f8893f7bbf9485148ff9a65f019e3f33bd5cdc87c83cab16b3fd9ec8" dependencies = [ "libc", "neli", - "thiserror 1.0.69", + "thiserror 2.0.17", "windows-sys 0.59.0", ] [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] @@ -6044,9 +6517,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.26" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "logging" @@ -6078,28 +6551,21 @@ dependencies = [ "thiserror 1.0.69", ] -[[package]] -name = "loom" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "tracing", - "tracing-subscriber", -] - [[package]] name = "lru" version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.2", + "hashbrown 0.15.5", ] +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + [[package]] name = "lru_cache" version = "0.1.0" @@ -6110,9 +6576,9 @@ dependencies = [ [[package]] name = "mach2" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" +checksum = "d640282b302c0bb0a2a8e0233ead9035e3bed871f0b7e81fe4a1ec829765db44" dependencies = [ "libc", ] @@ -6125,7 +6591,7 @@ checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -6134,7 +6600,7 @@ version = "0.1.0" dependencies = [ "libc", "metrics", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "tikv-jemalloc-ctl", "tikv-jemallocator", ] @@ -6146,10 +6612,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" [[package]] -name = "match_cfg" -version = "0.1.0" +name = "match-lookup" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" +checksum = "1265724d8cb29dbbc2b0f06fffb8bf1a8c0cf73a78eede9ba73a4a66c52a981e" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] [[package]] name = "matchers" @@ -6191,9 +6662,9 @@ checksum = "33746aadcb41349ec291e7f2f0a3aa6834d1d7c58066fb4b01f68efc4c4b7631" [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "memoffset" @@ -6204,6 +6675,12 @@ dependencies = [ "autocfg", ] +[[package]] +name = "memuse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d97bbf43eb4f088f8ca469930cde17fa036207c9a5e02ccc5107c4e8b17c964" + [[package]] name = "merkle_proof" version = "0.2.0" @@ -6259,7 +6736,7 @@ dependencies = [ "ethereum_ssz", "ethereum_ssz_derive", "itertools 0.13.0", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "rayon", "serde", "smallvec", @@ -6293,22 +6770,23 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.5" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", + "simd-adler32", ] [[package]] name = "mio" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" dependencies = [ "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "wasi", + "windows-sys 0.61.2", ] [[package]] @@ -6340,7 +6818,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -6352,7 +6830,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -6365,13 +6843,13 @@ dependencies = [ "bytes", "colored", "futures-util", - "http 1.3.0", + "http 1.3.1", "http-body 1.0.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.8.0", "hyper-util", "log", - "rand 0.9.0", + "rand 0.9.2", "regex", "serde_json", "serde_urlencoded", @@ -6381,21 +6859,20 @@ dependencies = [ [[package]] name = "moka" -version = "0.12.10" +version = "0.12.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" +checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077" dependencies = [ "crossbeam-channel", "crossbeam-epoch", "crossbeam-utils", - "loom", - "parking_lot 0.12.3", + "equivalent", + "parking_lot 0.12.5", "portable-atomic", "rustc_version 0.4.1", "smallvec", "tagptr", - "thiserror 1.0.69", - "uuid 1.15.1", + "uuid 1.18.1", ] [[package]] @@ -6444,11 +6921,12 @@ dependencies = [ [[package]] name = "multibase" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" +checksum = "8694bb4835f452b0e3bb06dbebb1d6fc5385b6ca1caf2e55fd165c042390ec77" dependencies = [ "base-x", + "base256emoji", "data-encoding", "data-encoding-macro", ] @@ -6567,7 +7045,7 @@ dependencies = [ "log", "netlink-packet-core", "netlink-sys", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -6616,9 +7094,9 @@ dependencies = [ "matches", "metrics", "operation_pool", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "rand 0.8.5", - "rand 0.9.0", + "rand 0.9.2", "rand_chacha 0.3.1", "rand_chacha 0.9.0", "serde_json", @@ -6626,7 +7104,7 @@ dependencies = [ "smallvec", "ssz_types", "store", - "strum", + "strum 0.24.1", "task_executor", "tokio", "tokio-stream", @@ -6645,7 +7123,7 @@ dependencies = [ "lru_cache", "metrics", "multiaddr", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "serde", "tiny-keccak", ] @@ -6674,11 +7152,11 @@ dependencies = [ [[package]] name = "nix" -version = "0.29.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.10.0", "cfg-if", "cfg_aliases", "libc", @@ -6728,11 +7206,36 @@ dependencies = [ [[package]] name = "nu-ansi-term" -version = "0.50.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint 0.4.6", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", ] [[package]] @@ -6743,15 +7246,15 @@ checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", + "rand 0.8.5", ] [[package]] name = "num-bigint-dig" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +checksum = "82c79c15c05d4bf82b6f5ef163104cc81a760d8e874d38ac50ab67c8877b647b" dependencies = [ - "byteorder", "lazy_static", "libm", "num-integer", @@ -6763,6 +7266,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + [[package]] name = "num-conv" version = "0.1.0" @@ -6789,6 +7301,32 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-modular" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17bb261bf36fa7d83f4c294f834e91256769097b3cb505d44831e0a179ac647f" + +[[package]] +name = "num-order" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "537b596b97c40fcf8056d153049eb22f481c17ebce72a513ec9286e4986d1bb6" +dependencies = [ + "num-modular", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint 0.4.6", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -6801,14 +7339,47 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi 0.5.2", "libc", ] +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "nums" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf3c74f925fb8cfc49a8022f2afce48a0683b70f9e439885594e84c5edbf5b01" +dependencies = [ + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "rand 0.8.5", +] + [[package]] name = "nybbles" version = "0.4.6" @@ -6821,11 +7392,26 @@ dependencies = [ "smallvec", ] +[[package]] +name = "objc2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" +dependencies = [ + "objc2-encode", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + [[package]] name = "object" -version = "0.36.7" +version = "0.37.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" dependencies = [ "memchr", ] @@ -6841,19 +7427,25 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.0" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde51589ab56b20a6f686b2c68f7a0bd6add753d697abf720d63f8db3ab7b1ad" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" dependencies = [ "critical-section", "portable-atomic", ] +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + [[package]] name = "oneshot_broadcast" version = "0.1.0" dependencies = [ - "parking_lot 0.12.3", + "parking_lot 0.12.5", ] [[package]] @@ -6881,7 +7473,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" dependencies = [ "arrayvec", - "auto_impl 1.2.1", + "auto_impl 1.3.0", "bytes", "ethereum-types", "open-fastrlp-derive", @@ -6901,11 +7493,11 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.72" +version = "0.10.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" +checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.10.0", "cfg-if", "foreign-types", "libc", @@ -6922,7 +7514,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -6933,18 +7525,18 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-src" -version = "300.4.2+3.4.1" +version = "300.5.4+3.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168ce4e058f975fe43e89d9ccf78ca668601887ae736090aacc23ae353c298e2" +checksum = "a507b3792995dae9b0df8a1c1e3771e8418b7c2d9f0baeba32e6fe8b06c7cb72" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.107" +version = "0.9.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07" +checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" dependencies = [ "cc", "libc", @@ -6963,7 +7555,7 @@ dependencies = [ "futures-sink", "js-sys", "pin-project-lite", - "thiserror 2.0.12", + "thiserror 2.0.17", "tracing", ] @@ -6975,9 +7567,9 @@ checksum = "50f6639e842a97dbea8886e3439710ae463120091e2e064518ba8e716e6ac36d" dependencies = [ "async-trait", "bytes", - "http 1.3.0", + "http 1.3.1", "opentelemetry", - "reqwest 0.12.15", + "reqwest 0.12.24", ] [[package]] @@ -6986,14 +7578,14 @@ version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbee664a43e07615731afc539ca60c6d9f1a9425e25ca09c57bc36c87c55852b" dependencies = [ - "http 1.3.0", + "http 1.3.1", "opentelemetry", "opentelemetry-http", "opentelemetry-proto", "opentelemetry_sdk", "prost", - "reqwest 0.12.15", - "thiserror 2.0.12", + "reqwest 0.12.24", + "thiserror 2.0.17", "tokio", "tonic 0.13.1", "tracing", @@ -7022,9 +7614,9 @@ dependencies = [ "futures-util", "opentelemetry", "percent-encoding", - "rand 0.9.0", + "rand 0.9.2", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -7039,8 +7631,8 @@ dependencies = [ "itertools 0.10.5", "maplit", "metrics", - "parking_lot 0.12.3", - "rand 0.9.0", + "parking_lot 0.12.5", + "rand 0.9.2", "rayon", "serde", "state_processing", @@ -7059,40 +7651,723 @@ dependencies = [ ] [[package]] -name = "pairing" -version = "0.23.0" +name = "p256" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" dependencies = [ - "group 0.13.0", + "ecdsa 0.16.9", + "elliptic-curve 0.13.8", + "primeorder", + "sha2 0.10.9", ] [[package]] -name = "parity-scale-codec" -version = "3.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9fde3d0718baf5bc92f577d652001da0f8d54cd03a7974e118d04fc888dc23d" +name = "p3-air" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" dependencies = [ - "arrayvec", - "bitvec 1.0.1", - "byte-slice-cast", - "const_format", - "impl-trait-for-tuples", - "parity-scale-codec-derive", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", +] + +[[package]] +name = "p3-air" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-matrix 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", +] + +[[package]] +name = "p3-baby-bear" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-mds 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-monty-31 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-poseidon2 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-blake3" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "blake3", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", +] + +[[package]] +name = "p3-bn254-fr" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "ff 0.13.1", + "halo2curves", + "num-bigint 0.4.6", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-poseidon2 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-bn254-fr" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "ff 0.13.1", + "halo2curves", + "num-bigint 0.4.6", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-poseidon2 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-symmetric 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-challenger" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "tracing", +] + +[[package]] +name = "p3-challenger" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-symmetric 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-util 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "serde", + "tracing", +] + +[[package]] +name = "p3-circle" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "itertools 0.13.0", + "p3-challenger 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-commit 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-fri 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "serde", + "tracing", +] + +[[package]] +name = "p3-circle" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "itertools 0.13.0", + "p3-challenger 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-commit 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-dft 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-fri 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-matrix 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-util 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "serde", + "tracing", +] + +[[package]] +name = "p3-commit" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "itertools 0.13.0", + "p3-challenger 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "serde", +] + +[[package]] +name = "p3-commit" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "itertools 0.13.0", + "p3-challenger 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-dft 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-matrix 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-util 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "serde", +] + +[[package]] +name = "p3-dft" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "itertools 0.13.0", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "tracing", +] + +[[package]] +name = "p3-dft" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "itertools 0.13.0", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-matrix 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-util 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "tracing", +] + +[[package]] +name = "p3-field" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "itertools 0.13.0", + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "nums", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "rand 0.8.5", + "serde", + "tracing", +] + +[[package]] +name = "p3-field" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "itertools 0.13.0", + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "nums", + "p3-maybe-rayon 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-util 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "rand 0.8.5", + "serde", + "tracing", +] + +[[package]] +name = "p3-fri" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "itertools 0.13.0", + "p3-challenger 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-commit 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-interpolation 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "rand 0.8.5", + "serde", + "tracing", +] + +[[package]] +name = "p3-fri" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "itertools 0.13.0", + "p3-challenger 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-commit 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-dft 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-interpolation 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-matrix 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-util 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "rand 0.8.5", + "serde", + "tracing", +] + +[[package]] +name = "p3-goldilocks" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "num-bigint 0.4.6", + "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-mds 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-poseidon2 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-interpolation" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", +] + +[[package]] +name = "p3-interpolation" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-matrix 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-util 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", +] + +[[package]] +name = "p3-keccak" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "itertools 0.13.0", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "tiny-keccak", +] + +[[package]] +name = "p3-keccak" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "itertools 0.13.0", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-symmetric 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-util 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "tiny-keccak", +] + +[[package]] +name = "p3-keccak-air" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "p3-air 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "tracing", +] + +[[package]] +name = "p3-keccak-air" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "p3-air 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-matrix 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-util 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "tracing", +] + +[[package]] +name = "p3-koala-bear" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-mds 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-monty-31 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-poseidon2 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-koala-bear" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-mds 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-monty-31 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-poseidon2 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-symmetric 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-matrix" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "itertools 0.13.0", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "rand 0.8.5", + "serde", + "tracing", + "transpose", +] + +[[package]] +name = "p3-matrix" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "itertools 0.13.0", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-util 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "rand 0.8.5", + "serde", + "tracing", + "transpose", +] + +[[package]] +name = "p3-maybe-rayon" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "rayon", +] + +[[package]] +name = "p3-maybe-rayon" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "rayon", +] + +[[package]] +name = "p3-mds" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "itertools 0.13.0", + "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "rand 0.8.5", +] + +[[package]] +name = "p3-mds" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "itertools 0.13.0", + "p3-dft 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-matrix 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-symmetric 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-util 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "rand 0.8.5", +] + +[[package]] +name = "p3-merkle-tree" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "itertools 0.13.0", + "p3-commit 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "rand 0.8.5", + "serde", + "tracing", +] + +[[package]] +name = "p3-merkle-tree" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "itertools 0.13.0", + "p3-commit 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-matrix 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-symmetric 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-util 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "rand 0.8.5", + "serde", + "tracing", +] + +[[package]] +name = "p3-mersenne-31" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "itertools 0.13.0", + "num-bigint 0.4.6", + "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-mds 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-poseidon2 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-mersenne-31" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "itertools 0.13.0", + "num-bigint 0.4.6", + "p3-dft 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-matrix 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-mds 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-poseidon2 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-symmetric 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-util 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-monty-31" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "itertools 0.13.0", + "num-bigint 0.4.6", + "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-mds 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-poseidon2 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "rand 0.8.5", + "serde", + "tracing", + "transpose", +] + +[[package]] +name = "p3-monty-31" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "itertools 0.13.0", + "num-bigint 0.4.6", + "p3-dft 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-matrix 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-mds 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-poseidon2 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-symmetric 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-util 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "rand 0.8.5", + "serde", + "serde_json", + "tracing", + "transpose", +] + +[[package]] +name = "p3-poseidon2" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "gcd", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-mds 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "rand 0.8.5", +] + +[[package]] +name = "p3-poseidon2" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "gcd", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-mds 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-symmetric 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-symmetric" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "itertools 0.13.0", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "serde", +] + +[[package]] +name = "p3-symmetric" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "itertools 0.13.0", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "serde", +] + +[[package]] +name = "p3-uni-stark" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "itertools 0.13.0", + "p3-air 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-challenger 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-commit 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "serde", + "tracing", +] + +[[package]] +name = "p3-uni-stark" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "itertools 0.13.0", + "p3-air 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-challenger 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-commit 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-dft 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-matrix 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-util 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "serde", + "tracing", +] + +[[package]] +name = "p3-util" +version = "0.1.0" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +dependencies = [ + "serde", +] + +[[package]] +name = "p3-util" +version = "0.1.0" +source = "git+https://github.com/ProjectZKM/Plonky3#faa24ca4597eebeecbf71b194b71c7d1a99b3f01" +dependencies = [ + "lock_api", + "serde", +] + +[[package]] +name = "pairing" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135590d8bdba2b31346f9cd1fb2a912329f5135e832a4f422942eb6ead8b6b3b" +dependencies = [ + "group 0.12.1", +] + +[[package]] +name = "pairing" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" +dependencies = [ + "group 0.13.0", +] + +[[package]] +name = "parity-scale-codec" +version = "3.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" +dependencies = [ + "arrayvec", + "bitvec 1.0.1", + "byte-slice-cast", + "const_format", + "impl-trait-for-tuples", + "parity-scale-codec-derive", "rustversion", "serde", ] [[package]] name = "parity-scale-codec-derive" -version = "3.7.4" +version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581c837bb6b9541ce7faa9377c20616e4fb7650f6b0f68bc93c827ee504fb7b3" +checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -7114,12 +8389,12 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.3" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", - "parking_lot_core 0.9.10", + "parking_lot_core 0.9.12", ] [[package]] @@ -7138,15 +8413,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.10" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.10", + "redox_syscall 0.5.18", "smallvec", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -7160,12 +8435,50 @@ dependencies = [ "subtle", ] +[[package]] +name = "pasta_curves" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc65faf8e7313b4b1fbaa9f7ca917a0eed499a9663be71477f87993604341d8" +dependencies = [ + "blake2b_simd", + "ff 0.12.1", + "group 0.12.1", + "lazy_static", + "rand 0.8.5", + "static_assertions", + "subtle", +] + +[[package]] +name = "pasta_curves" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e57598f73cc7e1b2ac63c79c517b31a0877cd7c402cdcaa311b5208de7a095" +dependencies = [ + "blake2b_simd", + "ff 0.13.1", + "group 0.13.0", + "hex", + "lazy_static", + "rand 0.8.5", + "serde", + "static_assertions", + "subtle", +] + [[package]] name = "paste" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "pathdiff" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" + [[package]] name = "pbkdf2" version = "0.8.0" @@ -7184,33 +8497,41 @@ dependencies = [ "digest 0.10.7", "hmac 0.12.1", "password-hash", - "sha2 0.10.8", + "sha2 0.10.9", ] [[package]] name = "pem" -version = "3.0.5" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" dependencies = [ "base64 0.22.1", - "serde", + "serde_core", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", ] [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.7.15" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" +checksum = "989e7521a040efde50c3ab6bbadafbe15ab6dc042686926be59ac35d74607df4" dependencies = [ "memchr", - "thiserror 2.0.12", "ucd-trie", ] @@ -7224,6 +8545,100 @@ dependencies = [ "rustc_version 0.4.1", ] +[[package]] +name = "pico-derive" +version = "0.1.0" +source = "git+https://github.com/ethproofs/pico.git?branch=wasm-stark-verifier#1956480fb5db68e3b21f702bf83550c98b766822" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "pico-vm" +version = "1.1.5" +source = "git+https://github.com/ethproofs/pico.git?branch=wasm-stark-verifier#1956480fb5db68e3b21f702bf83550c98b766822" +dependencies = [ + "anyhow", + "arrayref", + "backtrace", + "bincode", + "bytemuck", + "cfg-if", + "clap", + "cpu-time", + "crossbeam", + "csv", + "curve25519-dalek", + "dashmap", + "dashu", + "elf", + "elliptic-curve 0.13.8", + "eyre", + "ff 0.13.1", + "halo2curves", + "hashbrown 0.14.5", + "hex", + "hybrid-array", + "itertools 0.13.0", + "k256 0.13.4", + "lazy_static", + "log", + "nohash-hasher", + "num", + "num-bigint 0.4.6", + "num-traits", + "num_cpus", + "once_cell", + "p256", + "p3-air 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-baby-bear", + "p3-blake3", + "p3-bn254-fr 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-challenger 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-circle 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-commit 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-fri 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-goldilocks", + "p3-keccak 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-keccak-air 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-koala-bear 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-mds 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-merkle-tree 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-mersenne-31 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-poseidon2 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-uni-stark 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "paste", + "pico-derive", + "rand 0.8.5", + "rayon", + "rayon-scan", + "rrs-succinct", + "serde", + "serde_json", + "serde_with", + "snowbridge-amcl", + "static_assertions", + "strum 0.26.3", + "strum_macros 0.26.4", + "sysinfo 0.30.13", + "thiserror 1.0.69", + "tiny-keccak", + "tracing", + "tracing-forest", + "tracing-subscriber", + "typenum", + "vec_map", + "zkhash", +] + [[package]] name = "pin-project" version = "1.1.10" @@ -7241,7 +8656,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -7272,7 +8687,7 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "der 0.7.9", + "der 0.7.10", "spki 0.7.3", ] @@ -7318,17 +8733,16 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.4" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi 0.4.0", + "hermit-abi 0.5.2", "pin-project-lite", - "rustix 0.38.44", - "tracing", - "windows-sys 0.59.0", + "rustix 1.1.2", + "windows-sys 0.61.2", ] [[package]] @@ -7356,9 +8770,27 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "potential_utf" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +dependencies = [ + "zerovec", +] [[package]] name = "powerfmt" @@ -7372,7 +8804,7 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.8.23", + "zerocopy", ] [[package]] @@ -7411,12 +8843,21 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.30" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1ccf34da56fc294e7d4ccf69a85992b7dfb826b7cf57bac6a70bba3494cc08a" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.100", + "syn 2.0.110", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve 0.13.8", ] [[package]] @@ -7435,11 +8876,21 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.3.0" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit", + "toml_edit 0.23.7", ] [[package]] @@ -7485,14 +8936,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] name = "proc-macro2" -version = "1.0.94" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] @@ -7522,7 +8973,7 @@ dependencies = [ "fnv", "lazy_static", "memchr", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "thiserror 1.0.69", ] @@ -7534,7 +8985,7 @@ checksum = "cf41c1a7c32ed72abe5082fb19505b969095c12da9f5732a4bc9878757fd087c" dependencies = [ "dtoa", "itoa", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "prometheus-client-derive-encode", ] @@ -7546,7 +8997,7 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -7563,20 +9014,30 @@ dependencies = [ "zkvm_execution_layer", ] +[[package]] +name = "proofman-verifier" +version = "0.12.0" +source = "git+https://github.com/0xPolygonHermez/pil2-proofman.git?tag=v0.12.0#3e8a367a50193803b09a6d2d272d9ab01129ad44" +dependencies = [ + "bytemuck", + "fields", + "tracing", + "zstd 0.13.3", +] + [[package]] name = "proptest" -version = "1.6.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" +checksum = "bee689443a2bd0a16ab0348b52ee43e3b2d1b1f931c8aa5c9f8de4c86fbe8c40" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.9.0", - "lazy_static", + "bitflags 2.10.0", "num-traits", - "rand 0.8.5", - "rand_chacha 0.3.1", - "rand_xorshift 0.3.0", + "rand 0.9.2", + "rand_chacha 0.9.0", + "rand_xorshift 0.4.0", "regex-syntax", "rusty-fork", "tempfile", @@ -7591,7 +9052,7 @@ checksum = "095a99f75c69734802359b682be8daaf8980296731f6470434ea2c652af1dd30" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -7614,7 +9075,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -7647,7 +9108,7 @@ checksum = "5e617cc9058daa5e1fe5a0d23ed745773a5ee354111dad1ec0235b0cc16b6730" dependencies = [ "cfg-if", "darwin-libproc", - "derive_more 0.99.19", + "derive_more 0.99.20", "glob", "mach2", "nix 0.24.3", @@ -7691,56 +9152,59 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6" dependencies = [ - "env_logger", + "env_logger 0.8.4", "log", "rand 0.8.5", ] [[package]] name = "quickcheck_macros" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b22a693222d716a9587786f37ac3f6b4faedb5b80c23914e7303ff5a1d8016e9" +checksum = "f71ee38b42f8459a88d3362be6f9b841ad2d5421844f61eb1c59c11bff3ac14a" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.110", ] [[package]] name = "quinn" -version = "0.11.6" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", + "cfg_aliases", "futures-io", "pin-project-lite", "quinn-proto", "quinn-udp", "rustc-hash 2.1.1", - "rustls 0.23.23", - "socket2", - "thiserror 2.0.12", + "rustls 0.23.35", + "socket2 0.6.1", + "thiserror 2.0.17", "tokio", "tracing", + "web-time", ] [[package]] name = "quinn-proto" -version = "0.11.9" +version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ "bytes", - "getrandom 0.2.15", - "rand 0.8.5", + "getrandom 0.3.4", + "lru-slab", + "rand 0.9.2", "ring", "rustc-hash 2.1.1", - "rustls 0.23.23", + "rustls 0.23.35", "rustls-pki-types", "slab", - "thiserror 2.0.12", + "thiserror 2.0.17", "tinyvec", "tracing", "web-time", @@ -7748,27 +9212,33 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.10" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e46f3055866785f6b92bc6164b76be02ca8f2eb4b002c0354b28cf4c119e5944" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2", + "socket2 0.6.1", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.39" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1f1914ce909e1658d9907913b4b91947430c7d9be598b15a1912935b8c04801" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + [[package]] name = "r2d2" version = "0.8.10" @@ -7776,7 +9246,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51de85fb3fb6524929c8a2eb85e6b6d363de4e8c48f9e2c2eac4944abc181c93" dependencies = [ "log", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "scheduled-thread-pool", ] @@ -7816,14 +9286,13 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.0" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", "serde", - "zerocopy 0.8.23", ] [[package]] @@ -7852,7 +9321,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", ] [[package]] @@ -7861,7 +9330,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.1", + "getrandom 0.3.4", "serde", ] @@ -7885,9 +9354,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", @@ -7895,14 +9364,23 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", ] +[[package]] +name = "rayon-scan" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f87cc11a0140b4b0da0ffc889885760c61b13672d80a908920b2c0df078fa14" +dependencies = [ + "rayon", +] + [[package]] name = "rcgen" version = "0.13.2" @@ -7918,9 +9396,9 @@ dependencies = [ [[package]] name = "redb" -version = "2.4.0" +version = "2.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea0a72cd7140de9fc3e318823b883abf819c20d478ec89ce880466dc2ef263c6" +checksum = "8eca1e9d98d5a7e9002d0013e18d5a9b000aee942eb134883a82f06ebffb6c01" dependencies = [ "libc", ] @@ -7936,11 +9414,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.10" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.10.0", ] [[package]] @@ -7949,16 +9427,36 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", "libredox", "thiserror 1.0.69", ] +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.110", +] + [[package]] name = "regex" -version = "1.11.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", @@ -7968,9 +9466,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -7979,9 +9477,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.5" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "reqwest" @@ -7994,7 +9492,7 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2 0.3.26", + "h2 0.3.27", "http 0.2.12", "http-body 0.4.6", "hyper 0.14.32", @@ -8031,25 +9529,22 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.15" +version = "0.12.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" dependencies = [ "base64 0.22.1", "bytes", "futures-channel", "futures-core", "futures-util", - "http 1.3.0", + "http 1.3.1", "http-body 1.0.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.8.0", "hyper-util", - "ipnet", "js-sys", "log", - "mime", - "once_cell", "percent-encoding", "pin-project-lite", "serde", @@ -8058,12 +9553,12 @@ dependencies = [ "sync_wrapper 1.0.2", "tokio", "tower 0.5.2", + "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "windows-registry", ] [[package]] @@ -8084,13 +9579,9 @@ dependencies = [ [[package]] name = "resolv-conf" -version = "0.7.0" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" -dependencies = [ - "hostname", - "quick-error", -] +checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799" [[package]] name = "rfc6979" @@ -8121,7 +9612,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.15", + "getrandom 0.2.16", "libc", "untrusted", "windows-sys 0.52.0", @@ -8176,6 +9667,17 @@ dependencies = [ "archery", ] +[[package]] +name = "rrs-succinct" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3372685893a9f67d18e98e792d690017287fd17379a83d798d958e517d380fa9" +dependencies = [ + "downcast-rs", + "num_enum", + "paste", +] + [[package]] name = "rtnetlink" version = "0.13.1" @@ -8208,14 +9710,14 @@ dependencies = [ "bytes", "fastrlp 0.3.1", "fastrlp 0.4.0", - "num-bigint", + "num-bigint 0.4.6", "num-integer", "num-traits", "parity-scale-codec", "primitive-types", "proptest", "rand 0.8.5", - "rand 0.9.0", + "rand 0.9.2", "rlp", "ruint-macro", "serde_core", @@ -8262,9 +9764,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.24" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" [[package]] name = "rustc-hash" @@ -8299,7 +9801,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.26", + "semver 1.0.27", ] [[package]] @@ -8331,7 +9833,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -8340,15 +9842,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7178faa4b75a30e269c71e61c353ce2748cf3d76f0c44c393f4e60abf49b825" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.10.0", "errno", "libc", - "linux-raw-sys 0.9.2", - "windows-sys 0.59.0", + "linux-raw-sys 0.11.0", + "windows-sys 0.61.2", ] [[package]] @@ -8379,29 +9881,29 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.23" +version = "0.23.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" +checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" dependencies = [ "log", "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.102.8", + "rustls-webpki 0.103.8", "subtle", "zeroize", ] [[package]] name = "rustls-native-certs" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" +checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923" dependencies = [ "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.3.0", + "security-framework 3.5.1", ] [[package]] @@ -8424,9 +9926,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a" dependencies = [ "web-time", "zeroize", @@ -8455,9 +9957,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.4" +version = "0.103.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" +checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" dependencies = [ "ring", "rustls-pki-types", @@ -8466,15 +9968,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.20" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rusty-fork" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" dependencies = [ "fnv", "quick-error", @@ -8550,19 +10052,19 @@ version = "2.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -8571,7 +10073,31 @@ version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3cbc66816425a074528352f5789333ecff06ca41b36b0b0efdfbb29edc391a19" dependencies = [ - "parking_lot 0.12.3", + "parking_lot 0.12.5", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", ] [[package]] @@ -8607,7 +10133,7 @@ dependencies = [ "hmac 0.12.1", "pbkdf2 0.11.0", "salsa20 0.10.2", - "sha2 0.10.8", + "sha2 0.10.9", ] [[package]] @@ -8628,7 +10154,7 @@ checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ "base16ct 0.1.1", "der 0.6.1", - "generic-array 0.14.7", + "generic-array 0.14.9", "pkcs8 0.9.0", "subtle", "zeroize", @@ -8641,8 +10167,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct 0.2.0", - "der 0.7.9", - "generic-array 0.14.7", + "der 0.7.10", + "generic-array 0.14.9", "pkcs8 0.10.2", "serdect", "subtle", @@ -8676,7 +10202,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.10.0", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -8685,11 +10211,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.3.0" +version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c" +checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.10.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -8698,9 +10224,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ "core-foundation-sys", "libc", @@ -8717,11 +10243,12 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" dependencies = [ "serde", + "serde_core", ] [[package]] @@ -8761,9 +10288,9 @@ dependencies = [ [[package]] name = "serde-aux" -version = "4.6.0" +version = "4.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5290c39c5f6992b9dddbda28541d965dba46468294e6018a408fa297e6c602de" +checksum = "207f67b28fe90fb596503a9bf0bf1ea5e831e21307658e177c5dfcdfc3ab8a0a" dependencies = [ "serde", "serde-value", @@ -8790,6 +10317,15 @@ dependencies = [ "serde_urlencoded", ] +[[package]] +name = "serde_arrays" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38636132857f68ec3d5f3eb121166d2af33cb55174c4d5ff645db6165cbef0fd" +dependencies = [ + "serde", +] + [[package]] name = "serde_core" version = "1.0.228" @@ -8807,29 +10343,31 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "itoa", "memchr", "ryu", "serde", + "serde_core", ] [[package]] name = "serde_path_to_error" -version = "0.1.17" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" dependencies = [ "itoa", "serde", + "serde_core", ] [[package]] @@ -8840,7 +10378,16 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", ] [[package]] @@ -8861,8 +10408,17 @@ version = "3.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04" dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.12.0", + "schemars 0.9.0", + "schemars 1.1.0", "serde_core", + "serde_json", "serde_with_macros", + "time", ] [[package]] @@ -8874,7 +10430,7 @@ dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -8883,7 +10439,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.8.0", + "indexmap 2.12.0", "itoa", "ryu", "serde", @@ -8938,9 +10494,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", @@ -8984,9 +10540,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.2" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ "libc", ] @@ -9018,7 +10574,7 @@ dependencies = [ "eth2_keystore", "ethereum_serde_utils", "lockfile", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "reqwest 0.11.27", "serde", "task_executor", @@ -9027,6 +10583,12 @@ dependencies = [ "validator_metrics", ] +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + [[package]] name = "similar" version = "2.7.0" @@ -9039,9 +10601,9 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" dependencies = [ - "num-bigint", + "num-bigint 0.4.6", "num-traits", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", ] @@ -9056,7 +10618,7 @@ dependencies = [ "kzg", "logging", "node_test_rig", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "rayon", "sensitive_url", "serde_json", @@ -9066,14 +10628,17 @@ dependencies = [ "types", ] +[[package]] +name = "size" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fed904c7fb2856d868b92464fc8fa597fce366edea1a9cbfaa8cb5fe080bd6d" + [[package]] name = "slab" -version = "0.4.9" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "slasher" @@ -9092,14 +10657,14 @@ dependencies = [ "lru", "maplit", "metrics", - "parking_lot 0.12.3", - "rand 0.9.0", + "parking_lot 0.12.5", + "rand 0.9.2", "rayon", "redb", "safe_arith", "serde", "ssz_types", - "strum", + "strum 0.24.1", "tempfile", "tracing", "tree_hash", @@ -9148,15 +10713,15 @@ name = "slot_clock" version = "0.2.0" dependencies = [ "metrics", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "types", ] [[package]] name = "smallvec" -version = "1.14.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" dependencies = [ "arbitrary", "serde", @@ -9181,20 +10746,40 @@ dependencies = [ "rand_core 0.6.4", "ring", "rustc_version 0.4.1", - "sha2 0.10.8", + "sha2 0.10.9", "subtle", ] +[[package]] +name = "snowbridge-amcl" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460a9ed63cdf03c1b9847e8a12a5f5ba19c4efd5869e4a737e05be25d7c427e5" +dependencies = [ + "parity-scale-codec", + "scale-info", +] + [[package]] name = "socket2" -version = "0.5.8" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + [[package]] name = "spin" version = "0.9.8" @@ -9218,7 +10803,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", - "der 0.7.9", + "der 0.7.10", ] [[package]] @@ -9240,9 +10825,9 @@ dependencies = [ [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "state_processing" @@ -9260,7 +10845,7 @@ dependencies = [ "itertools 0.10.5", "merkle_proof", "metrics", - "rand 0.9.0", + "rand 0.9.2", "rayon", "safe_arith", "smallvec", @@ -9305,15 +10890,15 @@ dependencies = [ "logging", "lru", "metrics", - "parking_lot 0.12.3", - "rand 0.9.0", + "parking_lot 0.12.5", + "rand 0.9.2", "redb", "safe_arith", "serde", "smallvec", "ssz_types", "state_processing", - "strum", + "strum 0.24.1", "superstruct", "tempfile", "tracing", @@ -9323,6 +10908,12 @@ dependencies = [ "zstd 0.13.3", ] +[[package]] +name = "strength_reduce" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" + [[package]] name = "strsim" version = "0.10.0" @@ -9341,7 +10932,16 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" dependencies = [ - "strum_macros", + "strum_macros 0.24.3", +] + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros 0.26.4", ] [[package]] @@ -9357,6 +10957,35 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.110", +] + +[[package]] +name = "substrate-bn" +version = "0.6.0" +source = "git+https://github.com/ziren-patches/bn.git?branch=patch-0.6.0#aba71380457d798039111e6cc0fdf2e0718c6766" +dependencies = [ + "bytemuck", + "byteorder", + "cfg-if", + "crunchy", + "lazy_static", + "num-bigint 0.4.6", + "rand 0.8.5", + "rustc-hex", + "zkm-lib 1.2.2", +] + [[package]] name = "subtle" version = "2.6.1" @@ -9369,12 +10998,12 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b986e4a629907f20a2c2a639a75bc22a8b5d99b444e0d83c395f4cb309022bf" dependencies = [ - "darling 0.20.10", + "darling 0.20.11", "itertools 0.13.0", "proc-macro2", "quote", "smallvec", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -9400,9 +11029,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.100" +version = "2.0.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" +checksum = "a99801b5bd34ede4cf3fc688c5919368fea4e4814a4664359503e6015b280aea" dependencies = [ "proc-macro2", "quote", @@ -9418,7 +11047,7 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -9438,13 +11067,13 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -9462,6 +11091,21 @@ dependencies = [ "winapi", ] +[[package]] +name = "sysinfo" +version = "0.30.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a5b4ddaee55fb2bea2bf0e5000747e5f5c0de765e5a5ff87f4cd106439f4bb3" +dependencies = [ + "cfg-if", + "core-foundation-sys", + "libc", + "ntapi", + "once_cell", + "rayon", + "windows 0.52.0", +] + [[package]] name = "system-configuration" version = "0.5.1" @@ -9479,7 +11123,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.10.0", "core-foundation 0.9.4", "system-configuration-sys 0.6.0", ] @@ -9511,9 +11155,9 @@ dependencies = [ "lighthouse_network", "metrics", "network_utils", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "serde", - "sysinfo", + "sysinfo 0.26.9", "types", ] @@ -9551,26 +11195,25 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.18.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c317e0a526ee6120d8dabad239c8dadca62b24b6f168914bbbc8e2fb1f0e567" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ - "cfg-if", "fastrand", - "getrandom 0.3.1", + "getrandom 0.3.4", "once_cell", - "rustix 1.0.2", - "windows-sys 0.59.0", + "rustix 1.1.2", + "windows-sys 0.61.2", ] [[package]] name = "terminal_size" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45c6481c4829e4cc63825e62c49186a34538b7b2750b73b266581ffb612fb5ed" +checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" dependencies = [ - "rustix 1.0.2", - "windows-sys 0.59.0", + "rustix 1.1.2", + "windows-sys 0.60.2", ] [[package]] @@ -9598,11 +11241,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.17", ] [[package]] @@ -9613,28 +11256,27 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ "cfg-if", - "once_cell", ] [[package]] @@ -9648,9 +11290,9 @@ dependencies = [ [[package]] name = "tikv-jemalloc-ctl" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f21f216790c8df74ce3ab25b534e0718da5a1916719771d3fec23315c99e468b" +checksum = "661f1f6a57b3a36dc9174a2c10f19513b4866816e13425d3e418b11cc37bc24c" dependencies = [ "libc", "paste", @@ -9659,9 +11301,9 @@ dependencies = [ [[package]] name = "tikv-jemalloc-sys" -version = "0.6.0+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7" +version = "0.6.1+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3c60906412afa9c2b5b5a48ca6a5abe5736aec9eb48ad05037a677e52e4e2d" +checksum = "cd8aa5b2ab86a2cefa406d889139c162cbb230092f7d1d7cbc1716405d852a3b" dependencies = [ "cc", "libc", @@ -9669,9 +11311,9 @@ dependencies = [ [[package]] name = "tikv-jemallocator" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cec5ff18518d81584f477e9bfdf957f5bb0979b0bac3af4ca30b5b3ae2d2865" +checksum = "0359b4327f954e0567e69fb191cf1436617748813819c94b8cd4a431422d053a" dependencies = [ "libc", "tikv-jemalloc-sys", @@ -9679,9 +11321,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.39" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad298b01a40a23aac4580b67e3dbedb7cc8402f3592d7f49469de2ea4aecdd8" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", "itoa", @@ -9694,15 +11336,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.3" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "765c97a5b985b7c11d7bc27fa927dc4fe6af3a6dfb021d28deb60d3bf51e76ef" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.20" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8093bc3e81c3bc5f7879de09619d06c9a5a5e45ca44dfeeb7225bae38005c5c" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -9731,7 +11373,7 @@ dependencies = [ "pbkdf2 0.11.0", "rand 0.8.5", "rustc-hash 1.1.0", - "sha2 0.10.8", + "sha2 0.10.9", "thiserror 1.0.69", "unicode-normalization", "wasm-bindgen", @@ -9749,9 +11391,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.7.6" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", "zerovec", @@ -9769,9 +11411,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -9784,32 +11426,31 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.44.0" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9975ea0f48b5aa3972bf2d888c238182458437cc2a19374b81b25cdf1023fb3a" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ - "backtrace", "bytes", "libc", "mio", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.6.1", "tokio-macros", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -9845,11 +11486,11 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.23", + "rustls 0.23.35", "tokio", ] @@ -9867,9 +11508,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.13" +version = "0.7.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" dependencies = [ "bytes", "futures-core", @@ -9880,23 +11521,88 @@ dependencies = [ "tokio", ] +[[package]] +name = "toml" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime 0.6.11", + "toml_edit 0.22.27", +] + [[package]] name = "toml_datetime" -version = "0.6.8" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.12.0", + "toml_datetime 0.6.11", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +dependencies = [ + "indexmap 2.12.0", + "serde", + "serde_spanned", + "toml_datetime 0.6.11", + "toml_write", + "winnow 0.7.13", +] [[package]] name = "toml_edit" -version = "0.22.24" +version = "0.23.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" dependencies = [ - "indexmap 2.8.0", - "toml_datetime", - "winnow", + "indexmap 2.12.0", + "toml_datetime 0.7.3", + "toml_parser", + "winnow 0.7.13", ] +[[package]] +name = "toml_parser" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +dependencies = [ + "winnow 0.7.13", +] + +[[package]] +name = "toml_write" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + [[package]] name = "tonic" version = "0.12.3" @@ -9908,17 +11614,17 @@ dependencies = [ "axum", "base64 0.22.1", "bytes", - "h2 0.4.8", - "http 1.3.0", + "h2 0.4.12", + "http 1.3.1", "http-body 1.0.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.8.0", "hyper-timeout", "hyper-util", "percent-encoding", "pin-project", "prost", - "socket2", + "socket2 0.5.10", "tokio", "tokio-stream", "tower 0.4.13", @@ -9936,10 +11642,10 @@ dependencies = [ "async-trait", "base64 0.22.1", "bytes", - "http 1.3.0", + "http 1.3.1", "http-body 1.0.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.8.0", "hyper-timeout", "hyper-util", "percent-encoding", @@ -9947,7 +11653,7 @@ dependencies = [ "prost", "rustls-native-certs", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls 0.26.4", "tokio-stream", "tower 0.5.2", "tower-layer", @@ -9983,7 +11689,7 @@ checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", - "indexmap 2.8.0", + "indexmap 2.12.0", "pin-project-lite", "slab", "sync_wrapper 1.0.2", @@ -9994,6 +11700,24 @@ dependencies = [ "tracing", ] +[[package]] +name = "tower-http" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +dependencies = [ + "bitflags 2.10.0", + "bytes", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "iri-string", + "pin-project-lite", + "tower 0.5.2", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-layer" version = "0.3.3" @@ -10032,25 +11756,38 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", "valuable", ] +[[package]] +name = "tracing-forest" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee40835db14ddd1e3ba414292272eddde9dad04d3d4b65509656414d1c42592f" +dependencies = [ + "ansi_term", + "smallvec", + "thiserror 1.0.69", + "tracing", + "tracing-subscriber", +] + [[package]] name = "tracing-futures" version = "0.2.5" @@ -10121,6 +11858,16 @@ dependencies = [ "tracing-serde", ] +[[package]] +name = "transpose" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad61aed86bc3faea4300c7aee358b4c6d0c8d6ccc36524c96e4c92ccf26e77e" +dependencies = [ + "num-integer", + "strength_reduce", +] + [[package]] name = "tree_hash" version = "0.10.0" @@ -10140,10 +11887,10 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bee2ea1551f90040ab0e34b6fb7f2fa3bad8acc925837ac654f2c78a13e3089" dependencies = [ - "darling 0.20.10", + "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -10158,9 +11905,9 @@ dependencies = [ [[package]] name = "triomphe" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8f7726da4807b58ea5c96fdc122f80702030edc33b35aff9190a51148ccc85" +checksum = "dd69c5aa8f924c7519d6372789a74eac5b94fb0f8fcf0d4a97eb0bfc3e785f39" dependencies = [ "serde", "stable_deref_trait", @@ -10174,9 +11921,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "types" @@ -10205,9 +11952,9 @@ dependencies = [ "merkle_proof", "metastruct", "milhouse", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "paste", - "rand 0.9.0", + "rand 0.9.2", "rand_xorshift 0.4.0", "rayon", "regex", @@ -10280,15 +12027,15 @@ checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "unicode-normalization" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" +checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" dependencies = [ "tinyvec", ] @@ -10315,6 +12062,16 @@ dependencies = [ "subtle", ] +[[package]] +name = "unroll" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ad948c1cb799b1a70f836077721a92a35ac177d4daddf4c20a633786d4cf618" +dependencies = [ + "quote", + "syn 1.0.109", +] + [[package]] name = "unsafe-libyaml" version = "0.2.11" @@ -10346,21 +12103,16 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", "percent-encoding", + "serde", ] -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -10379,17 +12131,19 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", "serde", ] [[package]] name = "uuid" -version = "1.15.1" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f540e3240398cce6128b64ba83fdbdd86129c16a3aa1a3a252efd66eb3d587" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ - "getrandom 0.3.1", + "getrandom 0.3.4", + "js-sys", + "wasm-bindgen", ] [[package]] @@ -10407,12 +12161,12 @@ dependencies = [ "eth2", "fdlimit", "graffiti_file", - "hyper 1.6.0", + "hyper 1.8.0", "initialized_validators", "lighthouse_validator_store", "metrics", "monitoring_api", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "reqwest 0.11.27", "sensitive_url", "serde", @@ -10439,7 +12193,7 @@ dependencies = [ "filesystem", "hex", "lockfile", - "rand 0.9.0", + "rand 0.9.2", "tempfile", "tree_hash", "types", @@ -10468,15 +12222,15 @@ dependencies = [ "lighthouse_validator_store", "lighthouse_version", "logging", - "parking_lot 0.12.3", - "rand 0.9.0", + "parking_lot 0.12.5", + "rand 0.9.2", "sensitive_url", "serde", "serde_json", "signing_method", "slashing_protection", "slot_clock", - "sysinfo", + "sysinfo 0.26.9", "system_health", "task_executor", "tempfile", @@ -10503,7 +12257,7 @@ dependencies = [ "logging", "malloc_utils", "metrics", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "serde", "slot_clock", "tracing", @@ -10560,7 +12314,7 @@ dependencies = [ "futures", "graffiti_file", "logging", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "safe_arith", "slot_clock", "task_executor", @@ -10611,6 +12365,9 @@ name = "vec_map" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" +dependencies = [ + "serde", +] [[package]] name = "version_check" @@ -10693,50 +12450,37 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "wasi" -version = "0.13.3+wasi-0.2.2" +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.100", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" dependencies = [ "cfg-if", "js-sys", @@ -10747,9 +12491,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -10757,22 +12501,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn 2.0.100", - "wasm-bindgen-backend", + "syn 2.0.110", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" dependencies = [ "unicode-ident", ] @@ -10807,9 +12551,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" dependencies = [ "js-sys", "wasm-bindgen", @@ -10839,7 +12583,7 @@ dependencies = [ "initialized_validators", "lighthouse_validator_store", "logging", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "reqwest 0.11.27", "serde", "serde_json", @@ -10881,9 +12625,9 @@ checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c" [[package]] name = "widestring" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" +checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" [[package]] name = "winapi" @@ -10903,11 +12647,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -10918,21 +12662,21 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.53.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efc5cf48f83140dcaab716eeaea345f9e93d0018fb81162753a3f76c3397b538" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" dependencies = [ - "windows-core 0.53.0", + "windows-core 0.52.0", "windows-targets 0.52.6", ] [[package]] name = "windows" -version = "0.58.0" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +checksum = "efc5cf48f83140dcaab716eeaea345f9e93d0018fb81162753a3f76c3397b538" dependencies = [ - "windows-core 0.58.0", + "windows-core 0.53.0", "windows-targets 0.52.6", ] @@ -10969,55 +12713,44 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.58.0" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement", "windows-interface", - "windows-result 0.2.0", - "windows-strings 0.1.0", - "windows-targets 0.52.6", + "windows-link", + "windows-result 0.4.1", + "windows-strings", ] [[package]] name = "windows-implement" -version = "0.58.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] name = "windows-interface" -version = "0.58.0" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] name = "windows-link" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dccfd733ce2b1753b03b6d3c65edf020262ea35e20ccdf3e288043e6dd620e3" - -[[package]] -name = "windows-registry" -version = "0.4.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" -dependencies = [ - "windows-result 0.3.1", - "windows-strings 0.3.1", - "windows-targets 0.53.2", -] +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-result" @@ -11030,75 +12763,74 @@ dependencies = [ [[package]] name = "windows-result" -version = "0.2.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-targets 0.52.6", + "windows-link", ] [[package]] -name = "windows-result" -version = "0.3.1" +name = "windows-strings" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06374efe858fab7e4f881500e6e86ec8bc28f9462c47e5a9941a0142ad86b189" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ "windows-link", ] [[package]] -name = "windows-strings" -version = "0.1.0" +name = "windows-sys" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-result 0.2.0", - "windows-targets 0.52.6", + "windows-targets 0.42.2", ] [[package]] -name = "windows-strings" -version = "0.3.1" +name = "windows-sys" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-link", + "windows-targets 0.48.5", ] [[package]] name = "windows-sys" -version = "0.45.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.42.2", + "windows-targets 0.52.6", ] [[package]] name = "windows-sys" -version = "0.48.0" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] name = "windows-sys" -version = "0.52.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.52.6", + "windows-targets 0.53.5", ] [[package]] name = "windows-sys" -version = "0.59.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -11149,18 +12881,19 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.2" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] @@ -11183,9 +12916,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" @@ -11207,9 +12940,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" @@ -11231,9 +12964,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" @@ -11243,9 +12976,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" @@ -11267,9 +13000,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" @@ -11291,9 +13024,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" @@ -11315,9 +13048,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" @@ -11339,15 +13072,24 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" -version = "0.7.3" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] @@ -11363,13 +13105,10 @@ dependencies = [ ] [[package]] -name = "wit-bindgen-rt" -version = "0.33.0" +name = "wit-bindgen" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" -dependencies = [ - "bitflags 2.9.0", -] +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "workspace_members" @@ -11379,23 +13118,17 @@ dependencies = [ "quote", ] -[[package]] -name = "write16" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" - [[package]] name = "writeable" -version = "0.5.5" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "ws_stream_wasm" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" +checksum = "6c173014acad22e83f16403ee360115b38846fe754e735c5d9d3803fe70c6abc" dependencies = [ "async_io_stream", "futures", @@ -11404,7 +13137,7 @@ dependencies = [ "pharos", "rustc_version 0.4.1", "send_wrapper", - "thiserror 1.0.69", + "thiserror 2.0.17", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -11444,7 +13177,7 @@ dependencies = [ "nom", "oid-registry", "rusticata-macros", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", ] @@ -11464,9 +13197,9 @@ dependencies = [ [[package]] name = "xml-rs" -version = "0.8.25" +version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5b940ebc25896e71dd073bad2dbaa2abfe97b0a391415e22ad1326d9c54e3c4" +checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" [[package]] name = "xmltree" @@ -11497,7 +13230,7 @@ dependencies = [ "futures", "log", "nohash-hasher", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "pin-project", "rand 0.8.5", "static_assertions", @@ -11505,16 +13238,16 @@ dependencies = [ [[package]] name = "yamux" -version = "0.13.4" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17610762a1207ee816c6fadc29220904753648aba0a9ed61c7b8336e80a559c4" +checksum = "deab71f2e20691b4728b349c6cee8fc7223880fa67b6b4f92225ec32225447e5" dependencies = [ "futures", "log", "nohash-hasher", - "parking_lot 0.12.3", + "parking_lot 0.12.5", "pin-project", - "rand 0.8.5", + "rand 0.9.2", "static_assertions", "web-time", ] @@ -11530,11 +13263,10 @@ dependencies = [ [[package]] name = "yoke" -version = "0.7.5" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -11542,54 +13274,34 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.5" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", "synstructure", ] [[package]] name = "zerocopy" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" -dependencies = [ - "zerocopy-derive 0.7.35", -] - -[[package]] -name = "zerocopy" -version = "0.8.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd97444d05a4328b90e75e503a34bad781f14e28a823ad3557f0750df1ebcbc6" -dependencies = [ - "zerocopy-derive 0.8.23", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", + "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.23" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6352c01d0edd5db859a63e2605f4ea3183ddbd15e2c4a9e7d32184df75e4f154" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -11609,15 +13321,15 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", "synstructure", ] [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" dependencies = [ "serde", "zeroize_derive", @@ -11631,14 +13343,25 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", +] + +[[package]] +name = "zerotrie" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", ] [[package]] name = "zerovec" -version = "0.10.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ "yoke", "zerofrom", @@ -11647,13 +13370,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.10.3" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.110", ] [[package]] @@ -11665,7 +13388,7 @@ dependencies = [ "aes 0.8.4", "byteorder", "bzip2", - "constant_time_eq", + "constant_time_eq 0.1.5", "crc32fast", "crossbeam-utils", "flate2", @@ -11676,18 +13399,374 @@ dependencies = [ "zstd 0.11.2+zstd.1.5.2", ] +[[package]] +name = "zkhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4352d1081da6922701401cdd4cbf29a2723feb4cfabb5771f6fee8e9276da1c7" +dependencies = [ + "ark-ff 0.4.2", + "ark-std 0.4.0", + "bitvec 1.0.1", + "blake2", + "bls12_381", + "byteorder", + "cfg-if", + "group 0.12.1", + "group 0.13.0", + "halo2", + "hex", + "jubjub", + "lazy_static", + "pasta_curves 0.5.1", + "rand 0.8.5", + "serde", + "sha2 0.10.9", + "sha3", + "subtle", +] + +[[package]] +name = "zkm-core-executor" +version = "1.2.1" +source = "git+https://github.com/ProjectZKM/Ziren?tag=v1.2.1#cb8c24305e8889a448da3b3b06ce04b16deaa6be" +dependencies = [ + "anyhow", + "bincode", + "bytemuck", + "elf", + "enum-map", + "env_logger 0.11.8", + "eyre", + "hashbrown 0.14.5", + "hex", + "itertools 0.13.0", + "log", + "nohash-hasher", + "num", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-koala-bear 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-symmetric 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "rand 0.8.5", + "rayon-scan", + "rrs-succinct", + "serde", + "serde_json", + "sha2 0.10.9", + "strum 0.26.3", + "strum_macros 0.26.4", + "thiserror 1.0.69", + "tiny-keccak", + "tracing", + "tracing-subscriber", + "typenum", + "vec_map", + "zkm-curves", + "zkm-primitives 1.2.1", + "zkm-stark", +] + +[[package]] +name = "zkm-core-machine" +version = "1.2.1" +source = "git+https://github.com/ProjectZKM/Ziren?tag=v1.2.1#cb8c24305e8889a448da3b3b06ce04b16deaa6be" +dependencies = [ + "bincode", + "cbindgen", + "cc", + "cfg-if", + "elliptic-curve 0.13.8", + "generic-array 1.3.5", + "glob", + "hashbrown 0.14.5", + "hex", + "itertools 0.13.0", + "k256 0.13.4", + "log", + "num", + "num_cpus", + "p256", + "p3-air 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-challenger 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-keccak-air 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-koala-bear 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-matrix 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-poseidon2 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-uni-stark 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-util 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "pathdiff", + "rand 0.8.5", + "rayon", + "rayon-scan", + "serde", + "serde_json", + "size", + "snowbridge-amcl", + "static_assertions", + "strum 0.26.3", + "strum_macros 0.26.4", + "tempfile", + "thiserror 1.0.69", + "tiny-keccak", + "tracing", + "tracing-forest", + "tracing-subscriber", + "typenum", + "web-time", + "zkm-core-executor", + "zkm-curves", + "zkm-derive", + "zkm-primitives 1.2.1", + "zkm-stark", +] + +[[package]] +name = "zkm-curves" +version = "1.2.1" +source = "git+https://github.com/ProjectZKM/Ziren?tag=v1.2.1#cb8c24305e8889a448da3b3b06ce04b16deaa6be" +dependencies = [ + "cfg-if", + "curve25519-dalek", + "dashu", + "elliptic-curve 0.13.8", + "generic-array 1.3.5", + "itertools 0.13.0", + "k256 0.13.4", + "num", + "p256", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "serde", + "snowbridge-amcl", + "typenum", + "zkm-primitives 1.2.1", + "zkm-stark", +] + +[[package]] +name = "zkm-derive" +version = "1.2.1" +source = "git+https://github.com/ProjectZKM/Ziren?tag=v1.2.1#cb8c24305e8889a448da3b3b06ce04b16deaa6be" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "zkm-lib" +version = "1.2.1" +source = "git+https://github.com/ProjectZKM/Ziren?tag=v1.2.1#cb8c24305e8889a448da3b3b06ce04b16deaa6be" +dependencies = [ + "bincode", + "cfg-if", + "elliptic-curve 0.13.8", + "serde", + "sha2 0.10.9", + "zkm-primitives 1.2.1", +] + +[[package]] +name = "zkm-lib" +version = "1.2.2" +source = "git+https://github.com/ProjectZKM/Ziren.git#48a6e677648f82af41fd20bb15c2171a5d2a2d6b" +dependencies = [ + "bincode", + "cfg-if", + "elliptic-curve 0.13.8", + "serde", + "sha2 0.10.9", + "zkm-primitives 1.2.2", +] + +[[package]] +name = "zkm-primitives" +version = "1.2.1" +source = "git+https://github.com/ProjectZKM/Ziren?tag=v1.2.1#cb8c24305e8889a448da3b3b06ce04b16deaa6be" +dependencies = [ + "bincode", + "hex", + "lazy_static", + "num-bigint 0.4.6", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-koala-bear 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-monty-31 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-poseidon2 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-symmetric 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "serde", + "sha2 0.10.9", +] + +[[package]] +name = "zkm-primitives" +version = "1.2.2" +source = "git+https://github.com/ProjectZKM/Ziren.git#48a6e677648f82af41fd20bb15c2171a5d2a2d6b" +dependencies = [ + "bincode", + "hex", + "lazy_static", + "num-bigint 0.4.6", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-koala-bear 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-monty-31 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-poseidon2 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-symmetric 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "serde", + "sha2 0.10.9", +] + +[[package]] +name = "zkm-recursion-core" +version = "1.2.1" +source = "git+https://github.com/ProjectZKM/Ziren?tag=v1.2.1#cb8c24305e8889a448da3b3b06ce04b16deaa6be" +dependencies = [ + "backtrace", + "cbindgen", + "cc", + "ff 0.13.1", + "glob", + "hashbrown 0.14.5", + "itertools 0.13.0", + "p3-air 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-bn254-fr 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-challenger 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-commit 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-dft 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-fri 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-koala-bear 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-matrix 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-merkle-tree 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-monty-31 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-poseidon2 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-symmetric 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-util 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "pathdiff", + "rand 0.8.5", + "serde", + "static_assertions", + "thiserror 1.0.69", + "tracing", + "vec_map", + "zkhash", + "zkm-core-machine", + "zkm-derive", + "zkm-primitives 1.2.1", + "zkm-stark", +] + +[[package]] +name = "zkm-stark" +version = "1.2.1" +source = "git+https://github.com/ProjectZKM/Ziren?tag=v1.2.1#cb8c24305e8889a448da3b3b06ce04b16deaa6be" +dependencies = [ + "arrayref", + "hashbrown 0.14.5", + "itertools 0.13.0", + "num-bigint 0.4.6", + "num-traits", + "p3-air 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-challenger 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-circle 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-commit 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-dft 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-fri 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-keccak 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-koala-bear 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-matrix 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-mds 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-merkle-tree 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-mersenne-31 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-poseidon2 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-symmetric 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-uni-stark 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-util 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "rand 0.8.5", + "rayon-scan", + "serde", + "strum 0.26.3", + "strum_macros 0.26.4", + "sysinfo 0.30.13", + "tracing", + "tracing-forest", + "tracing-subscriber", + "zkm-derive", + "zkm-primitives 1.2.1", + "zkm-zkvm", +] + +[[package]] +name = "zkm-verifier" +version = "1.2.1" +source = "git+https://github.com/ProjectZKM/Ziren?tag=v1.2.1#cb8c24305e8889a448da3b3b06ce04b16deaa6be" +dependencies = [ + "anyhow", + "bincode", + "hex", + "itertools 0.13.0", + "lazy_static", + "once_cell", + "p3-commit 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-field 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-koala-bear 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-symmetric 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "p3-util 0.1.0 (git+https://github.com/ProjectZKM/Plonky3)", + "rayon", + "serde", + "sha2 0.10.9", + "strum_macros 0.26.4", + "substrate-bn", + "thiserror 2.0.17", + "zkm-core-executor", + "zkm-core-machine", + "zkm-primitives 1.2.1", + "zkm-recursion-core", + "zkm-stark", +] + +[[package]] +name = "zkm-zkvm" +version = "1.2.1" +source = "git+https://github.com/ProjectZKM/Ziren?tag=v1.2.1#cb8c24305e8889a448da3b3b06ce04b16deaa6be" +dependencies = [ + "bincode", + "cfg-if", + "getrandom 0.2.16", + "lazy_static", + "rand 0.8.5", + "serde", + "sha2 0.10.9", + "zkm-lib 1.2.1", + "zkm-primitives 1.2.1", +] + [[package]] name = "zkvm_execution_layer" version = "0.1.0" dependencies = [ "async-trait", + "bincode", "execution_layer", - "hashbrown 0.15.2", + "hashbrown 0.15.5", "lru", + "once_cell", + "pico-vm", + "proofman-verifier", + "rand 0.9.2", + "reqwest 0.11.27", "serde", - "thiserror 2.0.12", + "serde_json", + "tempfile", + "thiserror 2.0.17", "tokio", + "tracing", "types", + "uuid 0.8.2", + "zkm-verifier", ] [[package]] @@ -11705,7 +13784,7 @@ version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" dependencies = [ - "zstd-safe 7.2.3", + "zstd-safe 7.2.4", ] [[package]] @@ -11720,18 +13799,18 @@ dependencies = [ [[package]] name = "zstd-safe" -version = "7.2.3" +version = "7.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3051792fbdc2e1e143244dc28c60f73d8470e93f3f9cbd0ead44da5ed802722" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.14+zstd.1.5.7" +version = "2.0.16+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb060d4926e4ac3a3ad15d864e99ceb5f343c6b34f5bd6d81ae6ed417311be5" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" dependencies = [ "cc", "pkg-config", diff --git a/consensus/types/src/execution_proof.rs b/consensus/types/src/execution_proof.rs index 0b74d6286ea..b7a0bd57a0d 100644 --- a/consensus/types/src/execution_proof.rs +++ b/consensus/types/src/execution_proof.rs @@ -8,18 +8,22 @@ use tree_hash_derive::TreeHash; use super::ExecutionProofId; +/// TODO(ethproofs): This is currently set to 2MB for the Ethproofs demo testing. +/// /// Maximum size of proof data in bytes /// /// Note: Most proofs will fit within 300KB. Some zkVMs have 1MB proofs (currently) /// and so this number was set to accommodate for the most zkVMs. -pub const MAX_PROOF_DATA_BYTES: usize = 1_048_576; +pub const MAX_PROOF_DATA_BYTES: usize = 2_097_152; +/// TODO(ethproofs): This is currently set to 1 for the Ethproofs demo testing. +/// /// Minimum number of execution proofs required from different proof types /// before marking an execution payload as available in ZK-VM mode. /// /// This provides client diversity - nodes wait for proofs from K different /// zkVM+EL combinations before considering an execution payload available. -pub const DEFAULT_MIN_PROOFS_REQUIRED: usize = 2; +pub const DEFAULT_MIN_PROOFS_REQUIRED: usize = 1; /// Maximum number of execution proofs that can be requested or stored. /// This corresponds to the maximum number of proof types (zkVM+EL combinations) diff --git a/zkvm_execution_layer/Cargo.toml b/zkvm_execution_layer/Cargo.toml index 1603cd31e88..8e756d835af 100644 --- a/zkvm_execution_layer/Cargo.toml +++ b/zkvm_execution_layer/Cargo.toml @@ -8,10 +8,22 @@ async-trait = "0.1" #TODO(zkproofs): Remove lru = "0.12" hashbrown = "0.15" serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" tokio = { version = "1", features = ["full"] } thiserror = "2" types = { path = "../consensus/types" } execution_layer = { path = "../beacon_node/execution_layer" } +pico-vm = { git = "https://github.com/ethproofs/pico.git", package = "pico-vm", branch = "wasm-stark-verifier" } +proofman-verifier = { git = "https://github.com/0xPolygonHermez/pil2-proofman.git", tag = "v0.12.0" } +zkm-verifier = { git = "https://github.com/ProjectZKM/Ziren", tag = "v1.2.1" } +bincode = { workspace = true } +tempfile = { workspace = true } +reqwest = { workspace = true } +uuid = { workspace = true } +rand = { workspace = true } +once_cell = { workspace = true } +tracing = { workspace = true } + [dev-dependencies] diff --git a/zkvm_execution_layer/src/.DS_Store b/zkvm_execution_layer/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d92ef2f879182b3f3a311720a8b304c6ebf17489 GIT binary patch literal 6148 zcmeHKQA@)x5WZ|vTZb^gfsX-S2X-ZjwR?T@Z#bS^{`%zZz&2>V&LwsRul)DPqSNG626K89RhhH+11Z845} ziOluXf@Rxww^pA{od$Pi4L)riHV+#7sMVUyY^%Pve|***L{G7JQ9LuehNNt1oWmNun19U%dR6BeH4GRA78xk3VU6DZ)9?HL#UwK_3>XFq#Q>{xyiOZS(r@charD-5 t)LT>%ipv$s6g2udmJU6|yQordjgy1uYRnbl42t;?kTe)$82D2LJ^+)HlA8bk literal 0 HcmV?d00001 diff --git a/zkvm_execution_layer/src/dummy_proof_gen.rs b/zkvm_execution_layer/src/dummy_proof_gen.rs index 596dd90f99d..1bc0001c42d 100644 --- a/zkvm_execution_layer/src/dummy_proof_gen.rs +++ b/zkvm_execution_layer/src/dummy_proof_gen.rs @@ -1,9 +1,15 @@ +use crate::ethproofs_demo::{ + download_proof_binary, fetch_proofs_list, validate_proof, VERIFIER_STORE, +}; use crate::proof_generation::{ProofGenerationError, ProofGenerationResult, ProofGenerator}; use async_trait::async_trait; use std::time::Duration; use tokio::time::sleep; +use tracing::{debug, warn}; use types::{ExecutionBlockHash, ExecutionProof, ExecutionProofId, Hash256, Slot}; +/// TODO(ethproofs): Ethproofs demo implementation of proof generation. +/// /// Dummy proof generator for testing /// /// This generator simulates the proof generation process with a configurable delay @@ -18,7 +24,7 @@ impl DummyProofGenerator { pub fn new(proof_id: ExecutionProofId) -> Self { Self { proof_id, - generation_delay: Duration::from_millis(50), + generation_delay: Duration::from_millis(0), } } @@ -29,6 +35,25 @@ impl DummyProofGenerator { generation_delay: delay, } } + + /// TODO(ethproofs): Used for when Ethproofs API fails or verification fails. + /// + /// Create a fallback dummy proof + fn create_dummy_proof( + &self, + slot: Slot, + payload_hash: &ExecutionBlockHash, + block_root: &Hash256, + ) -> ProofGenerationResult { + let dummy_data = format!( + "ethproofs_fallback_subnet_{:?}_slot_{:?}_hash_{:?}", + self.proof_id, slot, payload_hash + ) + .into_bytes(); + + ExecutionProof::new(self.proof_id, slot, *payload_hash, *block_root, dummy_data) + .map_err(ProofGenerationError::ProofGenerationFailed) + } } #[async_trait] @@ -44,17 +69,121 @@ impl ProofGenerator for DummyProofGenerator { sleep(self.generation_delay).await; } - let proof_data = vec![ - 0xFF, - self.proof_id.as_u8(), - payload_hash.0[0], - payload_hash.0[1], - payload_hash.0[2], - payload_hash.0[3], - ]; + debug!( + proof_id = %self.proof_id, + block_hash = %payload_hash, + "Starting proof generation via Ethproofs API" + ); - ExecutionProof::new(self.proof_id, slot, *payload_hash, *block_root, proof_data) - .map_err(ProofGenerationError::ProofGenerationFailed) + // Get the Ethproofs prover UUID corresponding to this proof_id + let prover_uuid = match VERIFIER_STORE.get_prover_uuid_for_proof_id(self.proof_id) { + Some(uuid) => uuid, + None => { + warn!( + proof_id = %self.proof_id, + "No prover UUID mapping found for this proof_id, cannot query Ethproofs" + ); + return self.create_dummy_proof(slot, payload_hash, block_root); + } + }; + + let cluster = prover_uuid.to_string(); + + debug!( + proof_id = %self.proof_id, + prover_uuid = %prover_uuid, + "Querying Ethproofs API with single cluster" + ); + + // Fetch proofs from Ethproofs API for this proof_id's cluster + match fetch_proofs_list(*payload_hash, cluster).await { + Ok(proofs) => { + debug!( + proof_id = %self.proof_id, + block_hash = %payload_hash, + fetched_proof_count = proofs.len(), + "Fetched proofs from Ethproofs API" + ); + + // Try to download and verify the proof + if let Some(proof_entry) = proofs.first() { + debug!( + proof_id = proof_entry.proof_id, + cluster_id = %proof_entry.cluster_id, + "Attempting to download and verify proof" + ); + + // Download the proof binary + match download_proof_binary(proof_entry.proof_id).await { + Ok(proof_binary) => { + // Create proof for verification + match ExecutionProof::new( + self.proof_id, + slot, + *payload_hash, + *block_root, + proof_binary, + ) { + Ok(proof) => { + // Verify the proof + if validate_proof(&proof) { + debug!( + proof_id = proof_entry.proof_id, + cluster_id = %proof_entry.cluster_id, + target_proof_id = %self.proof_id, + "Proof verification succeeded, returning" + ); + return Ok(proof); + } else { + debug!( + proof_id = proof_entry.proof_id, + cluster_id = %proof_entry.cluster_id, + "Proof verification failed" + ); + } + } + Err(e) => { + debug!( + proof_id = proof_entry.proof_id, + error = %e, + "Failed to create proof structure" + ); + } + } + } + Err(e) => { + debug!( + proof_id = proof_entry.proof_id, + error = %e, + "Failed to download proof" + ); + } + } + } else { + warn!( + proof_id = %self.proof_id, + "No proofs returned from Ethproofs API" + ); + } + + // Fall back to dummy proof if we get here + warn!( + proof_id = %self.proof_id, + block_hash = %payload_hash, + "Proof from Ethproofs failed verification, falling back to dummy proof" + ); + self.create_dummy_proof(slot, payload_hash, block_root) + } + Err(e) => { + debug!( + proof_id = %self.proof_id, + block_hash = %payload_hash, + error = %e, + "Failed to fetch proofs from Ethproofs, using fallback dummy proof" + ); + self.create_dummy_proof(slot, payload_hash, block_root) + } + } } fn proof_id(&self) -> ExecutionProofId { @@ -95,12 +224,12 @@ mod tests { // Generate twice let proof1 = generator - .generate(slot, &block_hash, &block_root) - .await + // TODO(ethproofs): Changed so we don't make API calls here. + .create_dummy_proof(slot, &block_hash, &block_root) .unwrap(); let proof2 = generator - .generate(slot, &block_hash, &block_root) - .await + // TODO(ethproofs): Changed so we don't make API calls here. + .create_dummy_proof(slot, &block_hash, &block_root) .unwrap(); // Should be identical diff --git a/zkvm_execution_layer/src/dummy_proof_verifier.rs b/zkvm_execution_layer/src/dummy_proof_verifier.rs index b7d06a852c5..6fe5815eaa0 100644 --- a/zkvm_execution_layer/src/dummy_proof_verifier.rs +++ b/zkvm_execution_layer/src/dummy_proof_verifier.rs @@ -1,11 +1,14 @@ +use crate::ethproofs_demo::validate_proof; use crate::proof_verification::{ProofVerificationResult, ProofVerifier, VerificationError}; use std::time::Duration; +use tracing::debug; use types::{ExecutionProof, ExecutionProofId}; +/// TODO(ethproofs): Ethproofs demo implementation of proof verification. +/// /// Dummy proof verifier for testing /// -/// This verifier simulates the verification process with a configurable delay -/// and always returns successful verification. +/// This verifier simulates the verification process with a configurable delay. pub struct DummyVerifier { proof_id: ExecutionProofId, verification_delay: Duration, @@ -16,7 +19,7 @@ impl DummyVerifier { pub fn new(proof_id: ExecutionProofId) -> Self { Self { proof_id, - verification_delay: Duration::from_millis(10), + verification_delay: Duration::from_millis(0), } } @@ -41,10 +44,14 @@ impl ProofVerifier for DummyVerifier { std::thread::sleep(self.verification_delay); } - // Dummy verifier always succeeds - // In a real implementation, this would cryptographically verify that - // proof.proof_data is a valid zkVM proof for proof.block_hash - Ok(true) + debug!( + proof_id = %self.proof_id, + block_hash = %proof.block_hash, + "zkAttesting proof from Ethproofs API" + ); + + // Perform cryptographic verification using Ethproofs verifiers + Ok(validate_proof(proof)) } fn proof_id(&self) -> ExecutionProofId { diff --git a/zkvm_execution_layer/src/ethproofs_demo.rs b/zkvm_execution_layer/src/ethproofs_demo.rs new file mode 100644 index 00000000000..c5d34f2189f --- /dev/null +++ b/zkvm_execution_layer/src/ethproofs_demo.rs @@ -0,0 +1,273 @@ +use crate::verification_keys::VerificationKeyStore; +use crate::verifiers::VerifierStore; +use once_cell::sync::Lazy; +use reqwest::StatusCode; +use serde::{Deserialize, Serialize}; +use std::time::{Duration, Instant}; +use tracing::{debug, warn}; +use types::ExecutionProof; + +/// Global verification key store, loaded once on first access +pub static VERIFICATION_KEY_STORE: Lazy> = + Lazy::new(|| match VerificationKeyStore::load_embedded() { + Ok(store) => { + debug!( + key_count = store.len(), + prover_ids = ?store.prover_ids(), + "Loaded verification keys" + ); + Some(store) + } + Err(e) => { + warn!(error = %e, "Failed to load verification keys"); + None + } + }); + +/// Global verifier store, initialized with default verifiers +pub static VERIFIER_STORE: Lazy = Lazy::new(|| { + let store = VerifierStore::with_defaults(); + debug!(verifier_count = store.len(), "Initialized verifier store"); + store +}); + +/// Select a random prover_id from available registered verifiers +pub fn select_random_prover_id() -> [u8; 16] { + use rand::Rng; + + let available_provers = VERIFIER_STORE.prover_ids(); + + if available_provers.is_empty() { + warn!("No verifiers registered, cannot select prover_id"); + return [0u8; 16]; + } + + let mut rng = rand::rng(); + let random_index = rng.random_range(0..available_provers.len()); + let selected_uuid = available_provers[random_index]; + + debug!( + prover_id = %selected_uuid, + available_count = available_provers.len(), + "Randomly selected prover_id" + ); + + *selected_uuid.as_bytes() +} + +/// Represents a proof from the Ethproofs proofs list endpoint +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Ethproof { + /// The proof ID from Ethproofs + pub proof_id: u64, + /// The cluster ID that generated this proof (matches against available prover_ids) + pub cluster_id: String, +} + +/// Represents the response from the Ethproofs proofs list endpoint +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ProofsListResponse { + pub proofs: Vec, +} + +/// Fetch the list of proofs for a block from Ethproofs API. +/// +/// Polls the endpoint until all 3 proofs are available or a timeout is reached, using exponential backoff. +/// This accepts the block hash and a comma-separated string of cluster IDs to query. +/// +/// Returns all proofs found within the timeout window. +pub async fn fetch_proofs_list( + block_hash: types::ExecutionBlockHash, + clusters: String, +) -> Result, String> { + const MAX_WAIT_TIME_SECS: u64 = 30; + const INITIAL_DELAY_MS: u64 = 100; + const MAX_DELAY_MS: u64 = 5000; + const TARGET_PROOF_COUNT: usize = 3; + + let client = reqwest::Client::new(); + let url = format!( + "https://ethproofs.org/api/v0/proofs?block={}&clusters={}", + block_hash, clusters + ); + + let start = Instant::now(); + let mut delay_ms = INITIAL_DELAY_MS; + let mut accumulated_proofs: Vec = Vec::new(); + + loop { + // Check if we've exceeded max wait time + if start.elapsed() > Duration::from_secs(MAX_WAIT_TIME_SECS) { + debug!( + block_hash = %block_hash, + accumulated_count = accumulated_proofs.len(), + "Max wait time reached, proceeding with accumulated proofs" + ); + if accumulated_proofs.is_empty() { + return Err(format!( + "No proofs found for block {} within {} seconds", + block_hash, MAX_WAIT_TIME_SECS + )); + } + return Ok(accumulated_proofs); + } + + debug!( + block_hash = %block_hash, + accumulated_count = accumulated_proofs.len(), + delay_ms, + "Polling Ethproofs for proofs" + ); + + let response = client + .get(&url) + .send() + .await + .map_err(|e| format!("Request failed: {}", e))?; + + match response.status() { + StatusCode::OK => { + let response_data: ProofsListResponse = response + .json() + .await + .map_err(|e| format!("Failed to parse response: {}", e))?; + + // Accumulate new proofs (avoid duplicates by proof_id) + for proof in response_data.proofs { + if !accumulated_proofs + .iter() + .any(|p| p.proof_id == proof.proof_id) + { + accumulated_proofs.push(proof); + } + } + + debug!( + block_hash = %block_hash, + accumulated_count = accumulated_proofs.len(), + target_count = TARGET_PROOF_COUNT, + "Accumulated proofs from Ethproofs" + ); + + // If we have all target proofs (k), return early + if accumulated_proofs.len() >= TARGET_PROOF_COUNT { + return Ok(accumulated_proofs); + } + } + StatusCode::NOT_FOUND => { + debug!( + block_hash = %block_hash, + accumulated_count = accumulated_proofs.len(), + "Block not found, retrying..." + ); + } + status => { + return Err(format!( + "Request failed with status: {} for block {}", + status, block_hash + )); + } + } + + // Wait before retrying + tokio::time::sleep(Duration::from_millis(delay_ms)).await; + + // Exponential backoff: double the delay, up to MAX_DELAY_MS + delay_ms = (delay_ms * 2).min(MAX_DELAY_MS); + } +} + +/// Download a proof binary directly from Ethproofs using the proof_id. +/// +/// Returns the binary proof data. +pub async fn download_proof_binary(proof_id: u64) -> Result, String> { + let client = reqwest::Client::new(); + let url = format!("https://ethproofs.org/api/v0/proofs/download/{}", proof_id); + + debug!(proof_id, "Downloading proof binary from Ethproofs"); + + let response = client + .get(&url) + .send() + .await + .map_err(|e| format!("Request failed: {}", e))?; + + match response.status() { + StatusCode::OK => { + let proof_data = response + .bytes() + .await + .map_err(|e| format!("Failed to read response: {}", e))?; + + debug!( + proof_id, + size_bytes = proof_data.len(), + "Successfully downloaded proof binary" + ); + + Ok(proof_data.to_vec()) + } + StatusCode::NOT_FOUND => Err(format!("Proof {} not found", proof_id)), + status => Err(format!( + "Request failed with status: {} for proof {}", + status, proof_id + )), + } +} + +/// Validate a proof using the verifier store +/// +/// This function performs cryptographic verification of a proof by: +/// 1. Looking up the verifier for the proof's proof_id +/// 2. Running the cryptographic verification function +/// 3. Returning whether the proof is valid +pub fn validate_proof(proof: &ExecutionProof) -> bool { + // Get the prover UUID for this proof_id from the hardcoded mapping + let prover_uuid = match VERIFIER_STORE.get_prover_uuid_for_proof_id(proof.proof_id) { + Some(uuid) => uuid, + None => { + warn!( + proof_id = %proof.proof_id, + "No prover UUID mapping found for this proof_id" + ); + return false; + } + }; + + match VERIFIER_STORE.get(&prover_uuid) { + Some(verifier_entry) => { + debug!( + prover_id = %prover_uuid, + verifier = verifier_entry.name, + "Running cryptographic verification" + ); + + // Run the actual cryptographic verification + match (verifier_entry.verify_fn)(&proof.proof_data, &proof.proof_data) { + Ok(result) => { + debug!( + prover_id = %prover_uuid, + verification_result = result, + "Verification completed" + ); + result + } + Err(e) => { + warn!( + prover_id = %prover_uuid, + error = %e, + "Verification failed with error" + ); + false + } + } + } + None => { + warn!( + prover_id = %prover_uuid, + "No verifier registered for this prover, cannot verify proof" + ); + false + } + } +} diff --git a/zkvm_execution_layer/src/lib.rs b/zkvm_execution_layer/src/lib.rs index d8a6ec74af7..354f2cf018c 100644 --- a/zkvm_execution_layer/src/lib.rs +++ b/zkvm_execution_layer/src/lib.rs @@ -16,3 +16,8 @@ pub use config::ZKVMExecutionLayerConfig; /// Re-export the main ZK-VM engine API and config pub use engine_api::ZKVMEngineApi; pub use registry_proof_gen::GeneratorRegistry; + +/// TODO(ethproofs): Used for Ethproofs demo testing. +pub mod ethproofs_demo; +pub mod verification_keys; +pub mod verifiers; diff --git a/zkvm_execution_layer/src/verification_keys/brevis_79041a5b-ee8d-49b3-8207-86c7debf8e13.bin b/zkvm_execution_layer/src/verification_keys/brevis_79041a5b-ee8d-49b3-8207-86c7debf8e13.bin new file mode 100644 index 0000000000000000000000000000000000000000..2eba1d22d00b77ff30299f160b9720ce5c174adf GIT binary patch literal 234 zcmZ3x)XV2!zD*QQ_eqwjx``!s-}Yy5ynV@%qdk#7cS>743$FqL69WXWL+OB`{Pd#4 zTp=iz5lE{-*$fOUU>1aAU~sA|Nfkg+#|>8p(!~Hb8d*I=hJgXiI+#vB&mJ|YYj*-G zB6if4ZHy9Gygiav^1?Hz59^;ND(5)oYP@^u8ap$KJLE-&ck6s!oy?>!e2xEhL;(O8 Ct}>GV literal 0 HcmV?d00001 diff --git a/zkvm_execution_layer/src/verification_keys/mod.rs b/zkvm_execution_layer/src/verification_keys/mod.rs new file mode 100644 index 00000000000..3669da17117 --- /dev/null +++ b/zkvm_execution_layer/src/verification_keys/mod.rs @@ -0,0 +1,262 @@ +//! Execution proof verification key management +//! +//! This module handles loading and managing verification keys for execution proofs. +//! Verification keys are stored as .bin files in the verification_keys directory, +//! with each file named by its prover UUID. + +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; +use std::path::{Path, PathBuf}; +use tracing::{debug, warn}; +use uuid::Uuid; + +/// Represents a verification key for validating execution proofs +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ExecutionProofVerificationKey { + /// Unique identifier for the prover that generated this key + pub prover_id: Uuid, + /// The binary verification key data + pub vk: Vec, +} + +impl ExecutionProofVerificationKey { + /// Create a new verification key + pub fn new(prover_id: Uuid, vk: Vec) -> Self { + Self { prover_id, vk } + } + + /// Get the size of the verification key in bytes + pub fn size(&self) -> usize { + self.vk.len() + } +} + +/// Manager for loading and accessing verification keys +#[derive(Debug, Default)] +pub struct VerificationKeyStore { + /// Map of prover_id to verification key + keys: HashMap, +} + +impl VerificationKeyStore { + /// Create a new empty verification key store + pub fn new() -> Self { + Self { + keys: HashMap::new(), + } + } + + /// Load all verification keys from a directory + /// + /// Expected file format: `{prover}_{uuid}.bin` + /// where prover_id is a valid UUID string + /// + /// # Example + /// ```ignore + /// let store = VerificationKeyStore::load_from_directory("./verification_keys")?; + /// ``` + pub fn load_from_directory>(dir: P) -> Result { + let dir_path = dir.as_ref(); + + if !dir_path.exists() { + return Err(format!("Directory does not exist: {:?}", dir_path)); + } + + if !dir_path.is_dir() { + return Err(format!("Path is not a directory: {:?}", dir_path)); + } + + let mut store = Self::new(); + let entries = std::fs::read_dir(dir_path) + .map_err(|e| format!("Failed to read directory {:?}: {}", dir_path, e))?; + + for entry in entries { + let entry = entry.map_err(|e| format!("Failed to read directory entry: {}", e))?; + let path = entry.path(); + + // Only process .bin files + if path.extension().and_then(|s| s.to_str()) != Some("bin") { + continue; + } + + // Extract prover_id from filename + // Expected format: {prover}_{uuid}.bin + // We split on '_' and take index [1] for the UUID + let file_stem = match path.file_stem().and_then(|s| s.to_str()) { + Some(stem) => stem, + None => { + warn!("Skipping file with invalid name: {:?}", path); + continue; + } + }; + + // Split filename on '_' and extract UUID from second part + let parts: Vec<&str> = file_stem.split('_').collect(); + let uuid_str = if parts.len() >= 2 { + parts[1] + } else { + warn!( + "Skipping file {:?}: filename does not match pattern {{name}}_{{uuid}}", + path + ); + continue; + }; + + let prover_id = match Uuid::parse_str(uuid_str) { + Ok(uuid) => uuid, + Err(e) => { + warn!( + "Skipping file {:?}: '{}' is not a valid UUID: {}", + path, uuid_str, e + ); + continue; + } + }; + + // Read the verification key binary data + let vk_data = std::fs::read(&path) + .map_err(|e| format!("Failed to read file {:?}: {}", path, e))?; + + debug!( + prover_id = %prover_id, + size_bytes = vk_data.len(), + path = ?path, + "Loaded verification key" + ); + + let vk = ExecutionProofVerificationKey::new(prover_id, vk_data); + store.add_key(vk); + } + + debug!( + key_count = store.keys.len(), + "Loaded verification keys from directory" + ); + + Ok(store) + } + + /// Add a verification key to the store + pub fn add_key(&mut self, key: ExecutionProofVerificationKey) { + self.keys.insert(key.prover_id, key); + } + + /// Get a verification key by prover ID + pub fn get(&self, prover_id: &Uuid) -> Option<&ExecutionProofVerificationKey> { + self.keys.get(prover_id) + } + + /// Check if a verification key exists for a prover + pub fn contains(&self, prover_id: &Uuid) -> bool { + self.keys.contains_key(prover_id) + } + + /// Get the number of verification keys in the store + pub fn len(&self) -> usize { + self.keys.len() + } + + /// Check if the store is empty + pub fn is_empty(&self) -> bool { + self.keys.is_empty() + } + + /// Get all prover IDs + pub fn prover_ids(&self) -> Vec { + self.keys.keys().copied().collect() + } + + /// Load verification keys from the embedded directory + /// + /// This looks for .bin files in the beacon_chain/src/verification_keys directory + pub fn load_embedded() -> Result { + let vk_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("src") + .join("verification_keys"); + + Self::load_from_directory(vk_dir) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use std::fs; + use tempfile::TempDir; + + #[test] + fn test_verification_key_creation() { + let prover_id = Uuid::new_v4(); + let vk_data = vec![1, 2, 3, 4, 5]; + let vk = ExecutionProofVerificationKey::new(prover_id, vk_data.clone()); + + assert_eq!(vk.prover_id, prover_id); + assert_eq!(vk.vk, vk_data); + assert_eq!(vk.size(), 5); + } + + #[test] + fn test_verification_key_store() { + let mut store = VerificationKeyStore::new(); + assert!(store.is_empty()); + assert_eq!(store.len(), 0); + + let prover_id = Uuid::new_v4(); + let vk = ExecutionProofVerificationKey::new(prover_id, vec![1, 2, 3]); + + store.add_key(vk.clone()); + assert_eq!(store.len(), 1); + assert!(store.contains(&prover_id)); + + let retrieved = store.get(&prover_id).unwrap(); + assert_eq!(retrieved.prover_id, prover_id); + assert_eq!(retrieved.vk, vec![1, 2, 3]); + } + + #[test] + fn test_load_from_directory() { + let temp_dir = TempDir::new().unwrap(); + let vk_dir = temp_dir.path(); + + // Create test verification key files with format: {prover}_{uuid}.bin + let prover_id1 = Uuid::new_v4(); + let prover_id2 = Uuid::new_v4(); + + let vk1_path = vk_dir.join(format!("brevis_{}.bin", prover_id1)); + let vk2_path = vk_dir.join(format!("zkm_{}.bin", prover_id2)); + + fs::write(&vk1_path, vec![1, 2, 3, 4]).unwrap(); + fs::write(&vk2_path, vec![5, 6, 7, 8, 9]).unwrap(); + + // Also create a non-.bin file that should be ignored + fs::write(vk_dir.join("ignored.txt"), "ignore me").unwrap(); + + // Load the verification keys + let store = VerificationKeyStore::load_from_directory(vk_dir).unwrap(); + + assert_eq!(store.len(), 2); + assert!(store.contains(&prover_id1)); + assert!(store.contains(&prover_id2)); + + let vk1 = store.get(&prover_id1).unwrap(); + assert_eq!(vk1.vk, vec![1, 2, 3, 4]); + + let vk2 = store.get(&prover_id2).unwrap(); + assert_eq!(vk2.vk, vec![5, 6, 7, 8, 9]); + } + + #[test] + fn test_invalid_filename_ignored() { + let temp_dir = TempDir::new().unwrap(); + let vk_dir = temp_dir.path(); + + // Create file with invalid format (no underscore) + fs::write(vk_dir.join("not-valid-format.bin"), vec![1, 2, 3]).unwrap(); + + // Create file with invalid UUID after underscore + fs::write(vk_dir.join("prover_not-a-uuid.bin"), vec![1, 2, 3]).unwrap(); + + let store = VerificationKeyStore::load_from_directory(vk_dir).unwrap(); + assert_eq!(store.len(), 0); // Should be empty since filenames are invalid + } +} diff --git a/zkvm_execution_layer/src/verification_keys/zisk_33f14a82-47b7-42d7-9bc1-b81a46eea4fe.bin b/zkvm_execution_layer/src/verification_keys/zisk_33f14a82-47b7-42d7-9bc1-b81a46eea4fe.bin new file mode 100644 index 00000000000..2ed8bc0c089 --- /dev/null +++ b/zkvm_execution_layer/src/verification_keys/zisk_33f14a82-47b7-42d7-9bc1-b81a46eea4fe.bin @@ -0,0 +1 @@ +ç=-"K})ih1x%L \ No newline at end of file diff --git a/zkvm_execution_layer/src/verification_keys/zkm_84a01f4b-8078-44cf-b463-90ddcd124960.bin b/zkvm_execution_layer/src/verification_keys/zkm_84a01f4b-8078-44cf-b463-90ddcd124960.bin new file mode 100644 index 0000000000000000000000000000000000000000..68126883be2d37dacfd077b5de318cebb9d65402 GIT binary patch literal 234 zcmc}|=QU8cwx`ni!D7iLSE6huEl5n7S3B2x$ube~?4ncQA70op$n2|QVpvlVVUVIG z-*_rf$#J1EN4mxr!~F-p+A|r3=&~;gOFC+FFLe9eth_^6-(?sY#DwxxUfDA-Kma?G z4k*e`FG|c6fpQsvG#`}Bz#sr-u|WAwl_jYV5e5d3Iv%(>5RZWYhtV)q$i_f4FfafB DW}z@< literal 0 HcmV?d00001 diff --git a/zkvm_execution_layer/src/verifiers/mod.rs b/zkvm_execution_layer/src/verifiers/mod.rs new file mode 100644 index 00000000000..4c232e6d083 --- /dev/null +++ b/zkvm_execution_layer/src/verifiers/mod.rs @@ -0,0 +1,161 @@ +//! Execution proof verifiers +//! +//! This module manages different proof verification systems based on prover type. +//! Each verifier implements cryptographic proof verification for a specific zkVM or proof system. + +pub mod pico; +pub mod zisk; +pub mod zkm; + +use std::collections::HashMap; +use types::ExecutionProofId; +use uuid::Uuid; + +/// Result type for proof verification +pub type VerificationResult = Result; + +/// Ethproofs demo prover UUIDs - hardcoded mapping for demo testing +/// These constants define the relationship between internal proof_ids (0, 1, 2, etc.) +/// and Ethproofs prover UUIDs. +pub mod ethproofs_ids { + use uuid::Uuid; + + /// Brevis/Pico Prism verifier UUID (proof_id = 0) + pub const BREVIS_UUID: &str = "79041a5b-ee8d-49b3-8207-86c7debf8e13"; + + /// ZisK verifier UUID (proof_id = 1) + pub const ZISK_UUID: &str = "33f14a82-47b7-42d7-9bc1-b81a46eea4fe"; + + /// ZKM verifier UUID (proof_id = 2) + pub const ZKM_UUID: &str = "84a01f4b-8078-44cf-b463-90ddcd124960"; + + /// Parse a Brevis UUID + pub fn brevis() -> Uuid { + Uuid::parse_str(BREVIS_UUID).expect("Valid UUID") + } + + /// Parse a ZisK UUID + pub fn zisk() -> Uuid { + Uuid::parse_str(ZISK_UUID).expect("Valid UUID") + } + + /// Parse a ZKM UUID + pub fn zkm() -> Uuid { + Uuid::parse_str(ZKM_UUID).expect("Valid UUID") + } +} + +/// Trait for proof verifiers +pub trait ProofVerifier: Send + Sync { + /// Verify a proof given the proof data and verification key + fn verify(proof_data: &[u8], vk_data: &[u8]) -> VerificationResult + where + Self: Sized; + + /// Get the name of this verifier + fn name() -> &'static str + where + Self: Sized; +} + +/// Type for verifier function +pub type VerifierFn = fn(&[u8], &[u8]) -> VerificationResult; + +/// Verifier entry with name and verification function +pub struct VerifierEntry { + pub name: &'static str, + pub verify_fn: VerifierFn, +} + +/// Manager for multiple proof verifiers, keyed by prover UUID +#[derive(Default)] +pub struct VerifierStore { + /// Map of prover_id to verifier function + verifiers: HashMap, +} + +impl VerifierStore { + /// Create a new empty verifier store + pub fn new() -> Self { + Self { + verifiers: HashMap::new(), + } + } + + /// Register a verifier for a specific prover UUID + pub fn register(&mut self, prover_id: Uuid, name: &'static str, verify_fn: VerifierFn) { + self.verifiers + .insert(prover_id, VerifierEntry { name, verify_fn }); + } + + /// Get a verifier entry for a specific prover UUID + pub fn get(&self, prover_id: &Uuid) -> Option<&VerifierEntry> { + self.verifiers.get(prover_id) + } + + /// Check if a verifier exists for a prover + pub fn contains(&self, prover_id: &Uuid) -> bool { + self.verifiers.contains_key(prover_id) + } + + /// Get the number of registered verifiers + pub fn len(&self) -> usize { + self.verifiers.len() + } + + /// Check if the store is empty + pub fn is_empty(&self) -> bool { + self.verifiers.is_empty() + } + + /// Get all registered prover IDs + pub fn prover_ids(&self) -> Vec { + self.verifiers.keys().copied().collect() + } + + /// Get the prover UUID corresponding to a proof_id (Ethproofs demo mapping) + /// + /// For Ethproofs demo testing, this provides a hardcoded mapping of proof_ids to prover UUIDs: + /// - proof_id 0 → brevis (Pico verifier) + /// - proof_id 1 → zisk (ZisK verifier) + /// - proof_id 2 → zkm (ZKM verifier) + pub fn get_prover_uuid_for_proof_id(&self, proof_id: ExecutionProofId) -> Option { + let id = proof_id.as_u8() as u32; + match id { + 0 => Some(ethproofs_ids::brevis()), + 1 => Some(ethproofs_ids::zisk()), + 2 => Some(ethproofs_ids::zkm()), + _ => None, + } + } + + /// Create a store with default verifiers registered + /// + /// This registers verifiers for known Ethproofs prover UUIDs + pub fn with_defaults() -> Self { + let mut store = Self::new(); + + // Register Pico verifier for brevis + store.register( + ethproofs_ids::brevis(), + pico::PicoVerifier::name(), + pico::PicoVerifier::verify, + ); + + // Register ZisK verifier + store.register( + ethproofs_ids::zisk(), + zisk::ZiskVerifier::name(), + zisk::ZiskVerifier::verify, + ); + + // Register ZKM verifier + store.register( + ethproofs_ids::zkm(), + zkm::ZkmVerifier::name(), + zkm::ZkmVerifier::verify, + ); + + store + } +} diff --git a/zkvm_execution_layer/src/verifiers/pico.rs b/zkvm_execution_layer/src/verifiers/pico.rs new file mode 100644 index 00000000000..eaa178d6941 --- /dev/null +++ b/zkvm_execution_layer/src/verifiers/pico.rs @@ -0,0 +1,90 @@ +//! Pico zkVM STARK proof verifier +//! +//! This module implements proof verification for Pico zkVM using KoalaBear field arithmetic. + +use super::{ProofVerifier, VerificationResult}; +use pico_vm::{ + configs::{config::StarkGenericConfig, stark_config::KoalaBearPoseidon2}, + instances::{ + chiptype::recursion_chiptype::RecursionChipType, machine::combine::CombineMachine, + }, + machine::{keys::BaseVerifyingKey, machine::MachineBehavior, proof::MetaProof}, + primitives::consts::RECURSION_NUM_PVS, +}; +use serde::{Deserialize, Serialize}; +use tracing::debug; + +/// Serializable wrapper for KoalaBear MetaProof +/// Required because MetaProof contains Rc which isn't directly serializable +#[derive(Serialize, Deserialize)] +struct SerializableKoalaBearMetaProof { + proofs: Vec>, + vks: Vec>, + pv_stream: Option>, +} + +impl SerializableKoalaBearMetaProof { + fn to_meta_proof(self) -> MetaProof { + MetaProof::new(self.proofs.into(), self.vks.into(), self.pv_stream) + } +} + +/// Pico verifier using KoalaBear field +pub struct PicoVerifier; + +impl ProofVerifier for PicoVerifier { + fn verify(proof_data: &[u8], vk_data: &[u8]) -> VerificationResult { + debug!( + proof_size = proof_data.len(), + vk_size = vk_data.len(), + "Starting Pico verification" + ); + + // Deserialize the KoalaBear proof + let serializable_proof: SerializableKoalaBearMetaProof = + bincode::deserialize(proof_data) + .map_err(|e| format!("Failed to deserialize proof: {}", e))?; + let proof = serializable_proof.to_meta_proof(); + + // Deserialize the KoalaBear verification key + let riscv_vk: BaseVerifyingKey = bincode::deserialize(vk_data) + .map_err(|e| format!("Failed to deserialize verification key: {}", e))?; + + // Create the machine and run verification + let machine = CombineMachine::new( + KoalaBearPoseidon2::new(), + RecursionChipType::combine_chips(), + RECURSION_NUM_PVS, + ); + let result = machine.verify(&proof, &riscv_vk).is_ok(); + + debug!(verification_result = result, "Completed Pico verification"); + + Ok(result) + } + + fn name() -> &'static str { + "pico" + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_pico_verifier_name() { + assert_eq!(PicoVerifier::name(), "pico"); + } + + #[test] + fn test_pico_verifier_invalid_proof() { + let invalid_proof = vec![1, 2, 3, 4]; + let invalid_vk = vec![5, 6, 7, 8]; + + // Should fail to deserialize + let result = PicoVerifier::verify(&invalid_proof, &invalid_vk); + assert!(result.is_err()); + assert!(result.unwrap_err().contains("Failed to deserialize proof")); + } +} diff --git a/zkvm_execution_layer/src/verifiers/zisk.rs b/zkvm_execution_layer/src/verifiers/zisk.rs new file mode 100644 index 00000000000..d062bf6b78b --- /dev/null +++ b/zkvm_execution_layer/src/verifiers/zisk.rs @@ -0,0 +1,40 @@ +//! ZisK zkVM STARK proof verifier +//! +//! This module implements proof verification for ZisK zkVM using the proofman-verifier. + +use super::{ProofVerifier, VerificationResult}; +use tracing::debug; + +/// ZisK verifier +pub struct ZiskVerifier; + +impl ProofVerifier for ZiskVerifier { + fn verify(proof_data: &[u8], vk_data: &[u8]) -> VerificationResult { + debug!( + proof_size = proof_data.len(), + vk_size = vk_data.len(), + "Starting ZisK verification" + ); + + // Call the proofman-verifier verify function + let result = proofman_verifier::verify(proof_data, vk_data); + + debug!(verification_result = result, "Completed ZisK verification"); + + Ok(result) + } + + fn name() -> &'static str { + "zisk" + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_zisk_verifier_name() { + assert_eq!(ZiskVerifier::name(), "zisk"); + } +} diff --git a/zkvm_execution_layer/src/verifiers/zkm.rs b/zkvm_execution_layer/src/verifiers/zkm.rs new file mode 100644 index 00000000000..afe348e1f44 --- /dev/null +++ b/zkvm_execution_layer/src/verifiers/zkm.rs @@ -0,0 +1,41 @@ +//! ZKM (Ziren) zkVM STARK proof verifier +//! +//! This module implements proof verification for ZKM zkVM using the zkm-verifier. + +use super::{ProofVerifier, VerificationResult}; +use tracing::debug; +use zkm_verifier::StarkVerifier; + +/// ZKM verifier +pub struct ZkmVerifier; + +impl ProofVerifier for ZkmVerifier { + fn verify(proof_data: &[u8], vk_data: &[u8]) -> VerificationResult { + debug!( + proof_size = proof_data.len(), + vk_size = vk_data.len(), + "Starting ZKM verification" + ); + + // Call the zkm_verifier StarkVerifier::verify_proof function + let result = StarkVerifier::verify_proof(proof_data, vk_data).is_ok(); + + debug!(verification_result = result, "Completed ZKM verification"); + + Ok(result) + } + + fn name() -> &'static str { + "zkm" + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_zkm_verifier_name() { + assert_eq!(ZkmVerifier::name(), "zkm"); + } +} From 2fb5a3a73107e467d8d68d6ef41da0cfbd955bb4 Mon Sep 17 00:00:00 2001 From: fbwoolf <6493321+fbwoolf@users.noreply.github.com> Date: Fri, 31 Oct 2025 16:03:56 -0400 Subject: [PATCH 03/47] refactor: change fork to electra for demo --- beacon_node/lighthouse_network/src/types/pubsub.rs | 3 ++- beacon_node/lighthouse_network/tests/rpc_tests.rs | 6 ++++-- consensus/types/src/chain_spec.rs | 9 +++++++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/beacon_node/lighthouse_network/src/types/pubsub.rs b/beacon_node/lighthouse_network/src/types/pubsub.rs index 1cd46a2a723..c0cb8ee0a49 100644 --- a/beacon_node/lighthouse_network/src/types/pubsub.rs +++ b/beacon_node/lighthouse_network/src/types/pubsub.rs @@ -295,9 +295,10 @@ impl PubsubMessage { } GossipKind::ExecutionProof => { match fork_context.get_fork_from_context_bytes(gossip_topic.fork_digest) { + // TODO(ethproofs): Changed to Electra fork for demo. // TODO(zkproofs): we don't have the ChainSpec here, so if we change this to // be for gloas, then we should change it here too - Some(fork) if fork.fulu_enabled() => { + Some(fork) if fork.electra_enabled() => { let execution_proof = Arc::new( ExecutionProof::from_ssz_bytes(data) .map_err(|e| format!("{:?}", e))?, diff --git a/beacon_node/lighthouse_network/tests/rpc_tests.rs b/beacon_node/lighthouse_network/tests/rpc_tests.rs index d55a3c307ed..0ff397ab0fa 100644 --- a/beacon_node/lighthouse_network/tests/rpc_tests.rs +++ b/beacon_node/lighthouse_network/tests/rpc_tests.rs @@ -1750,7 +1750,8 @@ fn test_tcp_execution_proofs_by_root_single() { let _subscriber = build_tracing_subscriber(log_level, enable_logging); let spec = Arc::new(spec_with_all_forks_enabled()); - let current_fork_name = ForkName::Fulu; + // TODO(ethproofs): Changed to Electra fork for demo. + let current_fork_name = ForkName::Electra; let rt = Arc::new(Runtime::new().unwrap()); rt.block_on(async { @@ -2014,7 +2015,8 @@ fn test_tcp_execution_proofs_by_root_empty_response() { let _subscriber = build_tracing_subscriber(log_level, enable_logging); let spec = Arc::new(spec_with_all_forks_enabled()); - let current_fork_name = ForkName::Fulu; + // TODO(ethproofs): Changed to Electra fork for demo. + let current_fork_name = ForkName::Electra; let rt = Arc::new(Runtime::new().unwrap()); rt.block_on(async { diff --git a/consensus/types/src/chain_spec.rs b/consensus/types/src/chain_spec.rs index 4b0dd48c9c2..722678d327c 100644 --- a/consensus/types/src/chain_spec.rs +++ b/consensus/types/src/chain_spec.rs @@ -226,6 +226,7 @@ pub struct ChainSpec { */ /// Whether zkVM mode is enabled via CLI flag --activate-zkvm. /// When true, the node will subscribe to execution proof gossip, verify proofs, + /// TODO(ethproofs): Changed to Electra fork for demo. /// and optionally generate proofs. zkVM activates at the Fulu fork. /// Unlike other forks, this is not a network-wide activation but a per-node opt-in. pub zkvm_enabled: bool, @@ -501,12 +502,14 @@ impl ChainSpec { self.zkvm_enabled } + /// TODO(ethproofs): Changed to Electra fork epoch for demo. + /// /// Returns the epoch at which zkVM activates. /// Currently uses Fulu fork epoch. /// Returns None if zkVM is disabled or Fulu is not scheduled. pub fn zkvm_fork_epoch(&self) -> Option { if self.zkvm_enabled { - self.fulu_fork_epoch + self.electra_fork_epoch } else { None } @@ -518,9 +521,11 @@ impl ChainSpec { .is_some_and(|zkvm_fork_epoch| epoch >= zkvm_fork_epoch) } + /// TODO(ethproofs): Changed to Electra fork for demo. + /// /// Returns true if zkVM mode can be used at the given fork. pub fn is_zkvm_enabled_for_fork(&self, fork_name: ForkName) -> bool { - self.is_zkvm_enabled() && fork_name.fulu_enabled() + self.is_zkvm_enabled() && fork_name.electra_enabled() } /// Returns the minimum number of execution proofs required. From 50113630acbf3f1a671e29ad68591c664b79653d Mon Sep 17 00:00:00 2001 From: fbwoolf <6493321+fbwoolf@users.noreply.github.com> Date: Sat, 1 Nov 2025 20:29:12 -0400 Subject: [PATCH 04/47] chore: add ethproofs debug log tag --- consensus/types/src/execution_proof.rs | 4 +-- zkvm_execution_layer/src/dummy_proof_gen.rs | 36 ++++++++----------- .../src/dummy_proof_verifier.rs | 2 +- zkvm_execution_layer/src/ethproofs_demo.rs | 32 ++++++++--------- 4 files changed, 33 insertions(+), 41 deletions(-) diff --git a/consensus/types/src/execution_proof.rs b/consensus/types/src/execution_proof.rs index b7a0bd57a0d..95e984a2f27 100644 --- a/consensus/types/src/execution_proof.rs +++ b/consensus/types/src/execution_proof.rs @@ -8,7 +8,7 @@ use tree_hash_derive::TreeHash; use super::ExecutionProofId; -/// TODO(ethproofs): This is currently set to 2MB for the Ethproofs demo testing. +/// TODO(ethproofs): Set to 2MB for the demo. /// /// Maximum size of proof data in bytes /// @@ -16,7 +16,7 @@ use super::ExecutionProofId; /// and so this number was set to accommodate for the most zkVMs. pub const MAX_PROOF_DATA_BYTES: usize = 2_097_152; -/// TODO(ethproofs): This is currently set to 1 for the Ethproofs demo testing. +/// TODO(ethproofs): Set to 1 for the demo. /// /// Minimum number of execution proofs required from different proof types /// before marking an execution payload as available in ZK-VM mode. diff --git a/zkvm_execution_layer/src/dummy_proof_gen.rs b/zkvm_execution_layer/src/dummy_proof_gen.rs index 1bc0001c42d..1cef299ff6b 100644 --- a/zkvm_execution_layer/src/dummy_proof_gen.rs +++ b/zkvm_execution_layer/src/dummy_proof_gen.rs @@ -8,7 +8,7 @@ use tokio::time::sleep; use tracing::{debug, warn}; use types::{ExecutionBlockHash, ExecutionProof, ExecutionProofId, Hash256, Slot}; -/// TODO(ethproofs): Ethproofs demo implementation of proof generation. +/// TODO(ethproofs): Implementation of proof generation for demo. /// /// Dummy proof generator for testing /// @@ -36,7 +36,7 @@ impl DummyProofGenerator { } } - /// TODO(ethproofs): Used for when Ethproofs API fails or verification fails. + /// TODO(ethproofs): Used when Ethproofs API fails or verification fails. /// /// Create a fallback dummy proof fn create_dummy_proof( @@ -72,7 +72,7 @@ impl ProofGenerator for DummyProofGenerator { debug!( proof_id = %self.proof_id, block_hash = %payload_hash, - "Starting proof generation via Ethproofs API" + "[Ethproofs] Starting proof generation" ); // Get the Ethproofs prover UUID corresponding to this proof_id @@ -81,7 +81,7 @@ impl ProofGenerator for DummyProofGenerator { None => { warn!( proof_id = %self.proof_id, - "No prover UUID mapping found for this proof_id, cannot query Ethproofs" + "[Ethproofs] No prover UUID mapping found, cannot query API" ); return self.create_dummy_proof(slot, payload_hash, block_root); } @@ -92,7 +92,7 @@ impl ProofGenerator for DummyProofGenerator { debug!( proof_id = %self.proof_id, prover_uuid = %prover_uuid, - "Querying Ethproofs API with single cluster" + "[Ethproofs] Querying API" ); // Fetch proofs from Ethproofs API for this proof_id's cluster @@ -101,18 +101,12 @@ impl ProofGenerator for DummyProofGenerator { debug!( proof_id = %self.proof_id, block_hash = %payload_hash, - fetched_proof_count = proofs.len(), - "Fetched proofs from Ethproofs API" + count = proofs.len(), + "[Ethproofs] Fetched proofs" ); // Try to download and verify the proof if let Some(proof_entry) = proofs.first() { - debug!( - proof_id = proof_entry.proof_id, - cluster_id = %proof_entry.cluster_id, - "Attempting to download and verify proof" - ); - // Download the proof binary match download_proof_binary(proof_entry.proof_id).await { Ok(proof_binary) => { @@ -130,15 +124,13 @@ impl ProofGenerator for DummyProofGenerator { debug!( proof_id = proof_entry.proof_id, cluster_id = %proof_entry.cluster_id, - target_proof_id = %self.proof_id, - "Proof verification succeeded, returning" + "[Ethproofs] Proof verification succeeded" ); return Ok(proof); } else { debug!( proof_id = proof_entry.proof_id, - cluster_id = %proof_entry.cluster_id, - "Proof verification failed" + "[Ethproofs] Proof verification failed" ); } } @@ -146,7 +138,7 @@ impl ProofGenerator for DummyProofGenerator { debug!( proof_id = proof_entry.proof_id, error = %e, - "Failed to create proof structure" + "[Ethproofs] Failed to create proof structure" ); } } @@ -155,14 +147,14 @@ impl ProofGenerator for DummyProofGenerator { debug!( proof_id = proof_entry.proof_id, error = %e, - "Failed to download proof" + "[Ethproofs] Failed to download proof" ); } } } else { warn!( proof_id = %self.proof_id, - "No proofs returned from Ethproofs API" + "[Ethproofs] No proofs returned from API" ); } @@ -170,7 +162,7 @@ impl ProofGenerator for DummyProofGenerator { warn!( proof_id = %self.proof_id, block_hash = %payload_hash, - "Proof from Ethproofs failed verification, falling back to dummy proof" + "[Ethproofs] Proof verification failed, falling back to dummy" ); self.create_dummy_proof(slot, payload_hash, block_root) } @@ -179,7 +171,7 @@ impl ProofGenerator for DummyProofGenerator { proof_id = %self.proof_id, block_hash = %payload_hash, error = %e, - "Failed to fetch proofs from Ethproofs, using fallback dummy proof" + "[Ethproofs] Failed to fetch proofs, using dummy fallback" ); self.create_dummy_proof(slot, payload_hash, block_root) } diff --git a/zkvm_execution_layer/src/dummy_proof_verifier.rs b/zkvm_execution_layer/src/dummy_proof_verifier.rs index 6fe5815eaa0..3c383b91b6c 100644 --- a/zkvm_execution_layer/src/dummy_proof_verifier.rs +++ b/zkvm_execution_layer/src/dummy_proof_verifier.rs @@ -47,7 +47,7 @@ impl ProofVerifier for DummyVerifier { debug!( proof_id = %self.proof_id, block_hash = %proof.block_hash, - "zkAttesting proof from Ethproofs API" + "[Ethproofs] Verifying proof" ); // Perform cryptographic verification using Ethproofs verifiers diff --git a/zkvm_execution_layer/src/ethproofs_demo.rs b/zkvm_execution_layer/src/ethproofs_demo.rs index c5d34f2189f..80d17184592 100644 --- a/zkvm_execution_layer/src/ethproofs_demo.rs +++ b/zkvm_execution_layer/src/ethproofs_demo.rs @@ -14,12 +14,12 @@ pub static VERIFICATION_KEY_STORE: Lazy> = debug!( key_count = store.len(), prover_ids = ?store.prover_ids(), - "Loaded verification keys" + "[Ethproofs] Loaded verification keys" ); Some(store) } Err(e) => { - warn!(error = %e, "Failed to load verification keys"); + warn!(error = %e, "[Ethproofs] Failed to load verification keys"); None } }); @@ -27,7 +27,7 @@ pub static VERIFICATION_KEY_STORE: Lazy> = /// Global verifier store, initialized with default verifiers pub static VERIFIER_STORE: Lazy = Lazy::new(|| { let store = VerifierStore::with_defaults(); - debug!(verifier_count = store.len(), "Initialized verifier store"); + debug!(verifier_count = store.len(), "[Ethproofs] Initialized verifier store"); store }); @@ -38,7 +38,7 @@ pub fn select_random_prover_id() -> [u8; 16] { let available_provers = VERIFIER_STORE.prover_ids(); if available_provers.is_empty() { - warn!("No verifiers registered, cannot select prover_id"); + warn!("[Ethproofs] No verifiers registered, cannot select prover_id"); return [0u8; 16]; } @@ -49,7 +49,7 @@ pub fn select_random_prover_id() -> [u8; 16] { debug!( prover_id = %selected_uuid, available_count = available_provers.len(), - "Randomly selected prover_id" + "[Ethproofs] Randomly selected prover_id" ); *selected_uuid.as_bytes() @@ -101,7 +101,7 @@ pub async fn fetch_proofs_list( debug!( block_hash = %block_hash, accumulated_count = accumulated_proofs.len(), - "Max wait time reached, proceeding with accumulated proofs" + "[Ethproofs] Max wait time reached, proceeding with accumulated proofs" ); if accumulated_proofs.is_empty() { return Err(format!( @@ -116,7 +116,7 @@ pub async fn fetch_proofs_list( block_hash = %block_hash, accumulated_count = accumulated_proofs.len(), delay_ms, - "Polling Ethproofs for proofs" + "[Ethproofs] Polling Ethproofs for proofs" ); let response = client @@ -146,7 +146,7 @@ pub async fn fetch_proofs_list( block_hash = %block_hash, accumulated_count = accumulated_proofs.len(), target_count = TARGET_PROOF_COUNT, - "Accumulated proofs from Ethproofs" + "[Ethproofs] Accumulated proofs from Ethproofs" ); // If we have all target proofs (k), return early @@ -158,7 +158,7 @@ pub async fn fetch_proofs_list( debug!( block_hash = %block_hash, accumulated_count = accumulated_proofs.len(), - "Block not found, retrying..." + "[Ethproofs] Block not found, retrying..." ); } status => { @@ -184,7 +184,7 @@ pub async fn download_proof_binary(proof_id: u64) -> Result, String> { let client = reqwest::Client::new(); let url = format!("https://ethproofs.org/api/v0/proofs/download/{}", proof_id); - debug!(proof_id, "Downloading proof binary from Ethproofs"); + debug!(proof_id, "[Ethproofs] Downloading proof binary"); let response = client .get(&url) @@ -202,7 +202,7 @@ pub async fn download_proof_binary(proof_id: u64) -> Result, String> { debug!( proof_id, size_bytes = proof_data.len(), - "Successfully downloaded proof binary" + "[Ethproofs] Successfully downloaded proof binary" ); Ok(proof_data.to_vec()) @@ -228,7 +228,7 @@ pub fn validate_proof(proof: &ExecutionProof) -> bool { None => { warn!( proof_id = %proof.proof_id, - "No prover UUID mapping found for this proof_id" + "[Ethproofs] No prover UUID mapping found for this proof_id" ); return false; } @@ -239,7 +239,7 @@ pub fn validate_proof(proof: &ExecutionProof) -> bool { debug!( prover_id = %prover_uuid, verifier = verifier_entry.name, - "Running cryptographic verification" + "[Ethproofs] Running cryptographic verification" ); // Run the actual cryptographic verification @@ -248,7 +248,7 @@ pub fn validate_proof(proof: &ExecutionProof) -> bool { debug!( prover_id = %prover_uuid, verification_result = result, - "Verification completed" + "[Ethproofs] Verification completed" ); result } @@ -256,7 +256,7 @@ pub fn validate_proof(proof: &ExecutionProof) -> bool { warn!( prover_id = %prover_uuid, error = %e, - "Verification failed with error" + "[Ethproofs] Verification failed with error" ); false } @@ -265,7 +265,7 @@ pub fn validate_proof(proof: &ExecutionProof) -> bool { None => { warn!( prover_id = %prover_uuid, - "No verifier registered for this prover, cannot verify proof" + "[Ethproofs] No verifier registered for this prover, cannot verify proof" ); false } From 8c7b7a294ae3fde2eba09eb58c9b5b0edae55913 Mon Sep 17 00:00:00 2001 From: fbwoolf <6493321+fbwoolf@users.noreply.github.com> Date: Sun, 2 Nov 2025 12:08:08 -0500 Subject: [PATCH 05/47] fix: missing verification keys --- .gitignore | 2 ++ zkvm_execution_layer/src/ethproofs_demo.rs | 16 ++++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index efd7916b050..5ba61ed9b8f 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,5 @@ genesis.ssz # VSCode /.vscode + +.DS_Store diff --git a/zkvm_execution_layer/src/ethproofs_demo.rs b/zkvm_execution_layer/src/ethproofs_demo.rs index 80d17184592..86f9ad1d307 100644 --- a/zkvm_execution_layer/src/ethproofs_demo.rs +++ b/zkvm_execution_layer/src/ethproofs_demo.rs @@ -234,6 +234,18 @@ pub fn validate_proof(proof: &ExecutionProof) -> bool { } }; + // Look up the verification key for this prover + let vk = match VERIFICATION_KEY_STORE.as_ref().and_then(|store| store.get(&prover_uuid)) { + Some(vk_entry) => &vk_entry.vk, + None => { + warn!( + prover_id = %prover_uuid, + "[Ethproofs] No verification key found for this prover" + ); + return false; + } + }; + match VERIFIER_STORE.get(&prover_uuid) { Some(verifier_entry) => { debug!( @@ -242,8 +254,8 @@ pub fn validate_proof(proof: &ExecutionProof) -> bool { "[Ethproofs] Running cryptographic verification" ); - // Run the actual cryptographic verification - match (verifier_entry.verify_fn)(&proof.proof_data, &proof.proof_data) { + // Run the actual cryptographic verification with vk and proof data + match (verifier_entry.verify_fn)(vk, &proof.proof_data) { Ok(result) => { debug!( prover_id = %prover_uuid, From 9a77e17b95008043332c206d34a4e3c6173192a7 Mon Sep 17 00:00:00 2001 From: fbwoolf <6493321+fbwoolf@users.noreply.github.com> Date: Sun, 2 Nov 2025 12:17:00 -0500 Subject: [PATCH 06/47] fix: fetch only singular proof in parallel --- zkvm_execution_layer/src/dummy_proof_gen.rs | 6 +- zkvm_execution_layer/src/ethproofs_demo.rs | 78 +++++++++------------ 2 files changed, 37 insertions(+), 47 deletions(-) diff --git a/zkvm_execution_layer/src/dummy_proof_gen.rs b/zkvm_execution_layer/src/dummy_proof_gen.rs index 1cef299ff6b..d7a898c3dc6 100644 --- a/zkvm_execution_layer/src/dummy_proof_gen.rs +++ b/zkvm_execution_layer/src/dummy_proof_gen.rs @@ -1,5 +1,5 @@ use crate::ethproofs_demo::{ - download_proof_binary, fetch_proofs_list, validate_proof, VERIFIER_STORE, + VERIFIER_STORE, download_proof_binary, fetch_proof_from_ethproofs, validate_proof, }; use crate::proof_generation::{ProofGenerationError, ProofGenerationResult, ProofGenerator}; use async_trait::async_trait; @@ -95,8 +95,8 @@ impl ProofGenerator for DummyProofGenerator { "[Ethproofs] Querying API" ); - // Fetch proofs from Ethproofs API for this proof_id's cluster - match fetch_proofs_list(*payload_hash, cluster).await { + // Fetch proof from Ethproofs API for this proof_id's cluster + match fetch_proof_from_ethproofs(*payload_hash, cluster).await { Ok(proofs) => { debug!( proof_id = %self.proof_id, diff --git a/zkvm_execution_layer/src/ethproofs_demo.rs b/zkvm_execution_layer/src/ethproofs_demo.rs index 86f9ad1d307..90480b47fe2 100644 --- a/zkvm_execution_layer/src/ethproofs_demo.rs +++ b/zkvm_execution_layer/src/ethproofs_demo.rs @@ -27,7 +27,10 @@ pub static VERIFICATION_KEY_STORE: Lazy> = /// Global verifier store, initialized with default verifiers pub static VERIFIER_STORE: Lazy = Lazy::new(|| { let store = VerifierStore::with_defaults(); - debug!(verifier_count = store.len(), "[Ethproofs] Initialized verifier store"); + debug!( + verifier_count = store.len(), + "[Ethproofs] Initialized verifier store" + ); store }); @@ -70,53 +73,48 @@ pub struct ProofsListResponse { pub proofs: Vec, } -/// Fetch the list of proofs for a block from Ethproofs API. +/// Fetch a proof for a block from Ethproofs API. /// -/// Polls the endpoint until all 3 proofs are available or a timeout is reached, using exponential backoff. -/// This accepts the block hash and a comma-separated string of cluster IDs to query. +/// Polls the endpoint for a single cluster until a proof is found or a timeout is reached, +/// using exponential backoff. This accepts the block hash and a single cluster ID to query. /// -/// Returns all proofs found within the timeout window. -pub async fn fetch_proofs_list( +/// Returns the proof for the requested cluster, or an error if not found within the timeout window. +pub async fn fetch_proof_from_ethproofs( block_hash: types::ExecutionBlockHash, - clusters: String, + cluster: String, ) -> Result, String> { - const MAX_WAIT_TIME_SECS: u64 = 30; + const MAX_WAIT_TIME_SECS: u64 = 15; const INITIAL_DELAY_MS: u64 = 100; const MAX_DELAY_MS: u64 = 5000; - const TARGET_PROOF_COUNT: usize = 3; let client = reqwest::Client::new(); let url = format!( "https://ethproofs.org/api/v0/proofs?block={}&clusters={}", - block_hash, clusters + block_hash, cluster ); let start = Instant::now(); let mut delay_ms = INITIAL_DELAY_MS; - let mut accumulated_proofs: Vec = Vec::new(); loop { // Check if we've exceeded max wait time if start.elapsed() > Duration::from_secs(MAX_WAIT_TIME_SECS) { debug!( block_hash = %block_hash, - accumulated_count = accumulated_proofs.len(), - "[Ethproofs] Max wait time reached, proceeding with accumulated proofs" + cluster = %cluster, + "[Ethproofs] Timeout waiting for proof" ); - if accumulated_proofs.is_empty() { - return Err(format!( - "No proofs found for block {} within {} seconds", - block_hash, MAX_WAIT_TIME_SECS - )); - } - return Ok(accumulated_proofs); + return Err(format!( + "No proof found for block {} in cluster {} within {} seconds", + block_hash, cluster, MAX_WAIT_TIME_SECS + )); } debug!( block_hash = %block_hash, - accumulated_count = accumulated_proofs.len(), + cluster = %cluster, delay_ms, - "[Ethproofs] Polling Ethproofs for proofs" + "[Ethproofs] Polling Ethproofs for proof" ); let response = client @@ -132,32 +130,21 @@ pub async fn fetch_proofs_list( .await .map_err(|e| format!("Failed to parse response: {}", e))?; - // Accumulate new proofs (avoid duplicates by proof_id) - for proof in response_data.proofs { - if !accumulated_proofs - .iter() - .any(|p| p.proof_id == proof.proof_id) - { - accumulated_proofs.push(proof); - } - } - - debug!( - block_hash = %block_hash, - accumulated_count = accumulated_proofs.len(), - target_count = TARGET_PROOF_COUNT, - "[Ethproofs] Accumulated proofs from Ethproofs" - ); - - // If we have all target proofs (k), return early - if accumulated_proofs.len() >= TARGET_PROOF_COUNT { - return Ok(accumulated_proofs); + // Return the first proof found for this cluster + if !response_data.proofs.is_empty() { + debug!( + block_hash = %block_hash, + cluster = %cluster, + proof_count = response_data.proofs.len(), + "[Ethproofs] Found proof" + ); + return Ok(response_data.proofs); } } StatusCode::NOT_FOUND => { debug!( block_hash = %block_hash, - accumulated_count = accumulated_proofs.len(), + cluster = %cluster, "[Ethproofs] Block not found, retrying..." ); } @@ -235,7 +222,10 @@ pub fn validate_proof(proof: &ExecutionProof) -> bool { }; // Look up the verification key for this prover - let vk = match VERIFICATION_KEY_STORE.as_ref().and_then(|store| store.get(&prover_uuid)) { + let vk = match VERIFICATION_KEY_STORE + .as_ref() + .and_then(|store| store.get(&prover_uuid)) + { Some(vk_entry) => &vk_entry.vk, None => { warn!( From f186030429db530a7a07fe2653ff06248d60f651 Mon Sep 17 00:00:00 2001 From: fbwoolf <6493321+fbwoolf@users.noreply.github.com> Date: Sun, 2 Nov 2025 18:59:33 -0500 Subject: [PATCH 07/47] fix: verification key panic --- zkvm_execution_layer/src/ethproofs_demo.rs | 84 ++++++++++++---------- 1 file changed, 48 insertions(+), 36 deletions(-) diff --git a/zkvm_execution_layer/src/ethproofs_demo.rs b/zkvm_execution_layer/src/ethproofs_demo.rs index 90480b47fe2..6dd7807da78 100644 --- a/zkvm_execution_layer/src/ethproofs_demo.rs +++ b/zkvm_execution_layer/src/ethproofs_demo.rs @@ -221,54 +221,66 @@ pub fn validate_proof(proof: &ExecutionProof) -> bool { } }; - // Look up the verification key for this prover - let vk = match VERIFICATION_KEY_STORE - .as_ref() - .and_then(|store| store.get(&prover_uuid)) - { - Some(vk_entry) => &vk_entry.vk, - None => { - warn!( - prover_id = %prover_uuid, - "[Ethproofs] No verification key found for this prover" - ); - return false; - } - }; - - match VERIFIER_STORE.get(&prover_uuid) { - Some(verifier_entry) => { - debug!( - prover_id = %prover_uuid, - verifier = verifier_entry.name, - "[Ethproofs] Running cryptographic verification" - ); - - // Run the actual cryptographic verification with vk and proof data - match (verifier_entry.verify_fn)(vk, &proof.proof_data) { - Ok(result) => { + match &*VERIFICATION_KEY_STORE { + Some(store) => { + match store.get(&prover_uuid) { + Some(vk) => { debug!( prover_id = %prover_uuid, - verification_result = result, - "[Ethproofs] Verification completed" + vk_size = vk.size(), + proof_size = proof.proof_data.len(), + "[Ethproofs] Found verification key for prover" ); - result + + // Look up the verifier for this prover + match VERIFIER_STORE.get(&prover_uuid) { + Some(verifier_entry) => { + debug!( + prover_id = %prover_uuid, + verifier = verifier_entry.name, + "[Ethproofs] Found verifier, running cryptographic verification" + ); + + // Run the actual cryptographic verification + match (verifier_entry.verify_fn)(&proof.proof_data, &vk.vk) { + Ok(result) => { + debug!( + prover_id = %prover_uuid, + verification_result = result, + "[Ethproofs] Verification completed" + ); + result + } + Err(e) => { + warn!( + prover_id = %prover_uuid, + error = %e, + "[Ethproofs] Verification failed with error" + ); + false + } + } + } + None => { + warn!( + prover_id = %prover_uuid, + "[Ethproofs] No verifier registered for this prover, cannot verify proof" + ); + false + } + } } - Err(e) => { + None => { warn!( prover_id = %prover_uuid, - error = %e, - "[Ethproofs] Verification failed with error" + "[Ethproofs] No verification key found for this prover" ); false } } } None => { - warn!( - prover_id = %prover_uuid, - "[Ethproofs] No verifier registered for this prover, cannot verify proof" - ); + warn!("[Ethproofs] Verification key store not initialized"); false } } From 1aeda5c043f883c7525d00e6ac3801405f52e7d6 Mon Sep 17 00:00:00 2001 From: fbwoolf <6493321+fbwoolf@users.noreply.github.com> Date: Sun, 2 Nov 2025 19:32:35 -0500 Subject: [PATCH 08/47] refactor: simplify debug logs --- zkvm_execution_layer/src/dummy_proof_gen.rs | 51 +++++---------- zkvm_execution_layer/src/ethproofs_demo.rs | 72 ++------------------- 2 files changed, 20 insertions(+), 103 deletions(-) diff --git a/zkvm_execution_layer/src/dummy_proof_gen.rs b/zkvm_execution_layer/src/dummy_proof_gen.rs index d7a898c3dc6..a6fe12f53e2 100644 --- a/zkvm_execution_layer/src/dummy_proof_gen.rs +++ b/zkvm_execution_layer/src/dummy_proof_gen.rs @@ -1,5 +1,5 @@ use crate::ethproofs_demo::{ - VERIFIER_STORE, download_proof_binary, fetch_proof_from_ethproofs, validate_proof, + download_proof_binary, fetch_proof_from_ethproofs, validate_proof, VERIFIER_STORE, }; use crate::proof_generation::{ProofGenerationError, ProofGenerationResult, ProofGenerator}; use async_trait::async_trait; @@ -69,12 +69,6 @@ impl ProofGenerator for DummyProofGenerator { sleep(self.generation_delay).await; } - debug!( - proof_id = %self.proof_id, - block_hash = %payload_hash, - "[Ethproofs] Starting proof generation" - ); - // Get the Ethproofs prover UUID corresponding to this proof_id let prover_uuid = match VERIFIER_STORE.get_prover_uuid_for_proof_id(self.proof_id) { Some(uuid) => uuid, @@ -91,20 +85,14 @@ impl ProofGenerator for DummyProofGenerator { debug!( proof_id = %self.proof_id, - prover_uuid = %prover_uuid, - "[Ethproofs] Querying API" + slot = %slot, + block_hash = %payload_hash, + "[Ethproofs] Starting proof generation" ); // Fetch proof from Ethproofs API for this proof_id's cluster match fetch_proof_from_ethproofs(*payload_hash, cluster).await { Ok(proofs) => { - debug!( - proof_id = %self.proof_id, - block_hash = %payload_hash, - count = proofs.len(), - "[Ethproofs] Fetched proofs" - ); - // Try to download and verify the proof if let Some(proof_entry) = proofs.first() { // Download the proof binary @@ -119,32 +107,23 @@ impl ProofGenerator for DummyProofGenerator { proof_binary, ) { Ok(proof) => { - // Verify the proof + debug!( + proof_id = proof_entry.proof_id, + cluster_id = %proof_entry.cluster_id, + "[Ethproofs] Proof verification check" + ); + if validate_proof(&proof) { - debug!( - proof_id = proof_entry.proof_id, - cluster_id = %proof_entry.cluster_id, - "[Ethproofs] Proof verification succeeded" - ); return Ok(proof); - } else { - debug!( - proof_id = proof_entry.proof_id, - "[Ethproofs] Proof verification failed" - ); } } - Err(e) => { - debug!( - proof_id = proof_entry.proof_id, - error = %e, - "[Ethproofs] Failed to create proof structure" - ); + Err(_) => { + // Proof structure creation failed, will fallback below } } } Err(e) => { - debug!( + warn!( proof_id = proof_entry.proof_id, error = %e, "[Ethproofs] Failed to download proof" @@ -159,10 +138,10 @@ impl ProofGenerator for DummyProofGenerator { } // Fall back to dummy proof if we get here - warn!( + debug!( proof_id = %self.proof_id, block_hash = %payload_hash, - "[Ethproofs] Proof verification failed, falling back to dummy" + "[Ethproofs] API proof generation failed, using dummy fallback" ); self.create_dummy_proof(slot, payload_hash, block_root) } diff --git a/zkvm_execution_layer/src/ethproofs_demo.rs b/zkvm_execution_layer/src/ethproofs_demo.rs index 6dd7807da78..622249d3173 100644 --- a/zkvm_execution_layer/src/ethproofs_demo.rs +++ b/zkvm_execution_layer/src/ethproofs_demo.rs @@ -10,14 +10,7 @@ use types::ExecutionProof; /// Global verification key store, loaded once on first access pub static VERIFICATION_KEY_STORE: Lazy> = Lazy::new(|| match VerificationKeyStore::load_embedded() { - Ok(store) => { - debug!( - key_count = store.len(), - prover_ids = ?store.prover_ids(), - "[Ethproofs] Loaded verification keys" - ); - Some(store) - } + Ok(store) => Some(store), Err(e) => { warn!(error = %e, "[Ethproofs] Failed to load verification keys"); None @@ -25,38 +18,7 @@ pub static VERIFICATION_KEY_STORE: Lazy> = }); /// Global verifier store, initialized with default verifiers -pub static VERIFIER_STORE: Lazy = Lazy::new(|| { - let store = VerifierStore::with_defaults(); - debug!( - verifier_count = store.len(), - "[Ethproofs] Initialized verifier store" - ); - store -}); - -/// Select a random prover_id from available registered verifiers -pub fn select_random_prover_id() -> [u8; 16] { - use rand::Rng; - - let available_provers = VERIFIER_STORE.prover_ids(); - - if available_provers.is_empty() { - warn!("[Ethproofs] No verifiers registered, cannot select prover_id"); - return [0u8; 16]; - } - - let mut rng = rand::rng(); - let random_index = rng.random_range(0..available_provers.len()); - let selected_uuid = available_provers[random_index]; - - debug!( - prover_id = %selected_uuid, - available_count = available_provers.len(), - "[Ethproofs] Randomly selected prover_id" - ); - - *selected_uuid.as_bytes() -} +pub static VERIFIER_STORE: Lazy = Lazy::new(VerifierStore::with_defaults); /// Represents a proof from the Ethproofs proofs list endpoint #[derive(Debug, Clone, Serialize, Deserialize)] @@ -110,13 +72,6 @@ pub async fn fetch_proof_from_ethproofs( )); } - debug!( - block_hash = %block_hash, - cluster = %cluster, - delay_ms, - "[Ethproofs] Polling Ethproofs for proof" - ); - let response = client .get(&url) .send() @@ -132,21 +87,11 @@ pub async fn fetch_proof_from_ethproofs( // Return the first proof found for this cluster if !response_data.proofs.is_empty() { - debug!( - block_hash = %block_hash, - cluster = %cluster, - proof_count = response_data.proofs.len(), - "[Ethproofs] Found proof" - ); return Ok(response_data.proofs); } } StatusCode::NOT_FOUND => { - debug!( - block_hash = %block_hash, - cluster = %cluster, - "[Ethproofs] Block not found, retrying..." - ); + // Proof not ready yet, will retry with exponential backoff } status => { return Err(format!( @@ -185,13 +130,6 @@ pub async fn download_proof_binary(proof_id: u64) -> Result, String> { .bytes() .await .map_err(|e| format!("Failed to read response: {}", e))?; - - debug!( - proof_id, - size_bytes = proof_data.len(), - "[Ethproofs] Successfully downloaded proof binary" - ); - Ok(proof_data.to_vec()) } StatusCode::NOT_FOUND => Err(format!("Proof {} not found", proof_id)), @@ -229,7 +167,7 @@ pub fn validate_proof(proof: &ExecutionProof) -> bool { prover_id = %prover_uuid, vk_size = vk.size(), proof_size = proof.proof_data.len(), - "[Ethproofs] Found verification key for prover" + "[Ethproofs] Found vk for prover" ); // Look up the verifier for this prover @@ -238,7 +176,7 @@ pub fn validate_proof(proof: &ExecutionProof) -> bool { debug!( prover_id = %prover_uuid, verifier = verifier_entry.name, - "[Ethproofs] Found verifier, running cryptographic verification" + "[Ethproofs] Found verifier, starting verification" ); // Run the actual cryptographic verification From aa2dcf3698afd6431964d885733fa8e41df68542 Mon Sep 17 00:00:00 2001 From: fbwoolf <6493321+fbwoolf@users.noreply.github.com> Date: Mon, 3 Nov 2025 14:59:11 -0500 Subject: [PATCH 09/47] chore: add zkcloud as prover --- ...d_884fcc21-d522-4b4a-b535-7cfde199485c.bin | 1 + zkvm_execution_layer/src/verifiers/mod.rs | 23 ++++++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 zkvm_execution_layer/src/verification_keys/zkcloud_884fcc21-d522-4b4a-b535-7cfde199485c.bin diff --git a/zkvm_execution_layer/src/verification_keys/zkcloud_884fcc21-d522-4b4a-b535-7cfde199485c.bin b/zkvm_execution_layer/src/verification_keys/zkcloud_884fcc21-d522-4b4a-b535-7cfde199485c.bin new file mode 100644 index 00000000000..2ed8bc0c089 --- /dev/null +++ b/zkvm_execution_layer/src/verification_keys/zkcloud_884fcc21-d522-4b4a-b535-7cfde199485c.bin @@ -0,0 +1 @@ +ç=-"K})ih1x%L \ No newline at end of file diff --git a/zkvm_execution_layer/src/verifiers/mod.rs b/zkvm_execution_layer/src/verifiers/mod.rs index 4c232e6d083..64debfd5d21 100644 --- a/zkvm_execution_layer/src/verifiers/mod.rs +++ b/zkvm_execution_layer/src/verifiers/mod.rs @@ -26,7 +26,10 @@ pub mod ethproofs_ids { /// ZisK verifier UUID (proof_id = 1) pub const ZISK_UUID: &str = "33f14a82-47b7-42d7-9bc1-b81a46eea4fe"; - /// ZKM verifier UUID (proof_id = 2) + /// ZKCloud verifier UUID (proof_id = 2) + pub const ZKCLOUD_UUID: &str = "884fcc21-d522-4b4a-b535-7cfde199485c"; + + /// ZKM verifier UUID (proof_id = 3) pub const ZKM_UUID: &str = "84a01f4b-8078-44cf-b463-90ddcd124960"; /// Parse a Brevis UUID @@ -39,6 +42,11 @@ pub mod ethproofs_ids { Uuid::parse_str(ZISK_UUID).expect("Valid UUID") } + /// Parse a ZKCloud UUID + pub fn zkcloud() -> Uuid { + Uuid::parse_str(ZKCLOUD_UUID).expect("Valid UUID") + } + /// Parse a ZKM UUID pub fn zkm() -> Uuid { Uuid::parse_str(ZKM_UUID).expect("Valid UUID") @@ -118,13 +126,15 @@ impl VerifierStore { /// For Ethproofs demo testing, this provides a hardcoded mapping of proof_ids to prover UUIDs: /// - proof_id 0 → brevis (Pico verifier) /// - proof_id 1 → zisk (ZisK verifier) - /// - proof_id 2 → zkm (ZKM verifier) + /// - proof_id 2 → zkcloud (ZisK verifier) + /// - proof_id 3 → zkm (ZKM verifier) pub fn get_prover_uuid_for_proof_id(&self, proof_id: ExecutionProofId) -> Option { let id = proof_id.as_u8() as u32; match id { 0 => Some(ethproofs_ids::brevis()), 1 => Some(ethproofs_ids::zisk()), - 2 => Some(ethproofs_ids::zkm()), + 2 => Some(ethproofs_ids::zkcloud()), + 3 => Some(ethproofs_ids::zkm()), _ => None, } } @@ -149,6 +159,13 @@ impl VerifierStore { zisk::ZiskVerifier::verify, ); + // Register ZKCloud verifier (uses ZisK verifier) + store.register( + ethproofs_ids::zkcloud(), + zisk::ZiskVerifier::name(), + zisk::ZiskVerifier::verify, + ); + // Register ZKM verifier store.register( ethproofs_ids::zkm(), From c248a34a240baede6f3bda72dc50f8b26bc0d5f5 Mon Sep 17 00:00:00 2001 From: fbwoolf <6493321+fbwoolf@users.noreply.github.com> Date: Tue, 4 Nov 2025 13:16:21 -0500 Subject: [PATCH 10/47] fix: pico prism verifier --- Cargo.lock | 326 +++++++++++---------- zkvm_execution_layer/Cargo.toml | 2 +- zkvm_execution_layer/src/verifiers/pico.rs | 70 +++-- 3 files changed, 212 insertions(+), 186 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f0bab57b5f8..16efbf96ab9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2213,6 +2213,17 @@ dependencies = [ "memchr", ] +[[package]] +name = "core_affinity" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a034b3a7b624016c6e13f5df875747cc25f884156aad2abd12b6c46797971342" +dependencies = [ + "libc", + "num_cpus", + "winapi", +] + [[package]] name = "cpu-time" version = "1.0.0" @@ -7665,10 +7676,10 @@ dependencies = [ [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", ] [[package]] @@ -7683,13 +7694,13 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-mds 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-monty-31 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-poseidon2 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-mds 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-monty-31 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-poseidon2 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "rand 0.8.5", "serde", ] @@ -7697,24 +7708,24 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ "blake3", - "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", ] [[package]] name = "p3-bn254-fr" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ "ff 0.13.1", "halo2curves", "num-bigint 0.4.6", - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-poseidon2 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-poseidon2 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "rand 0.8.5", "serde", ] @@ -7737,12 +7748,12 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "tracing", ] @@ -7762,17 +7773,17 @@ dependencies = [ [[package]] name = "p3-circle" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ "itertools 0.13.0", - "p3-challenger 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-commit 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-fri 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-challenger 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-commit 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-fri 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "serde", "tracing", ] @@ -7798,14 +7809,14 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ "itertools 0.13.0", - "p3-challenger 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-challenger 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "serde", ] @@ -7826,13 +7837,13 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ "itertools 0.13.0", - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "tracing", ] @@ -7852,15 +7863,15 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ "itertools 0.13.0", "num-bigint 0.4.6", "num-integer", "num-traits", "nums", - "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "rand 0.8.5", "serde", "tracing", @@ -7886,17 +7897,17 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ "itertools 0.13.0", - "p3-challenger 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-commit 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-interpolation 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-challenger 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-commit 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-interpolation 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "rand 0.8.5", "serde", "tracing", @@ -7924,15 +7935,15 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ "num-bigint 0.4.6", - "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-mds 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-poseidon2 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-mds 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-poseidon2 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "rand 0.8.5", "serde", ] @@ -7940,12 +7951,12 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", ] [[package]] @@ -7962,12 +7973,12 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ "itertools 0.13.0", - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "tiny-keccak", ] @@ -7986,13 +7997,13 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ - "p3-air 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-air 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "tracing", ] @@ -8012,13 +8023,13 @@ dependencies = [ [[package]] name = "p3-koala-bear" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-mds 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-monty-31 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-poseidon2 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-mds 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-monty-31 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-poseidon2 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "rand 0.8.5", "serde", ] @@ -8040,12 +8051,12 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ "itertools 0.13.0", - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "rand 0.8.5", "serde", "tracing", @@ -8070,7 +8081,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ "rayon", ] @@ -8086,14 +8097,14 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ "itertools 0.13.0", - "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "rand 0.8.5", ] @@ -8114,15 +8125,15 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ "itertools 0.13.0", - "p3-commit 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-commit 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "rand 0.8.5", "serde", "tracing", @@ -8148,18 +8159,18 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ "itertools 0.13.0", "num-bigint 0.4.6", - "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-mds 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-poseidon2 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-mds 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-poseidon2 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "rand 0.8.5", "serde", ] @@ -8186,18 +8197,18 @@ dependencies = [ [[package]] name = "p3-monty-31" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ "itertools 0.13.0", "num-bigint 0.4.6", - "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-mds 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-poseidon2 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-mds 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-poseidon2 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "rand 0.8.5", "serde", "tracing", @@ -8229,12 +8240,12 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ "gcd", - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-mds 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-mds 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "rand 0.8.5", ] @@ -8254,10 +8265,10 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ "itertools 0.13.0", - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "serde", ] @@ -8274,17 +8285,17 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ "itertools 0.13.0", - "p3-air 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-challenger 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-commit 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-air 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-challenger 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-commit 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "serde", "tracing", ] @@ -8310,7 +8321,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/brevis-network/Plonky3.git?rev=476cff48#476cff48576f11f5828fc7875be5b708c5a0e387" +source = "git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b#a4d376babf5d09497f1fab1df7f1ffce01260973" dependencies = [ "serde", ] @@ -8548,7 +8559,7 @@ dependencies = [ [[package]] name = "pico-derive" version = "0.1.0" -source = "git+https://github.com/ethproofs/pico.git?branch=wasm-stark-verifier#1956480fb5db68e3b21f702bf83550c98b766822" +source = "git+https://github.com/brevis-network/pico.git?branch=main#f6a24234c0637ded3cb6ff797cbc2e7a4f679795" dependencies = [ "proc-macro2", "quote", @@ -8557,8 +8568,8 @@ dependencies = [ [[package]] name = "pico-vm" -version = "1.1.5" -source = "git+https://github.com/ethproofs/pico.git?branch=wasm-stark-verifier#1956480fb5db68e3b21f702bf83550c98b766822" +version = "1.1.6" +source = "git+https://github.com/brevis-network/pico.git?branch=main#f6a24234c0637ded3cb6ff797cbc2e7a4f679795" dependencies = [ "anyhow", "arrayref", @@ -8567,12 +8578,14 @@ dependencies = [ "bytemuck", "cfg-if", "clap", + "core_affinity", "cpu-time", "crossbeam", "csv", "curve25519-dalek", "dashmap", "dashu", + "derive_more 2.0.1", "elf", "elliptic-curve 0.13.8", "eyre", @@ -8585,36 +8598,35 @@ dependencies = [ "k256 0.13.4", "lazy_static", "log", - "nohash-hasher", "num", "num-bigint 0.4.6", "num-traits", "num_cpus", "once_cell", "p256", - "p3-air 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-air 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "p3-baby-bear", "p3-blake3", - "p3-bn254-fr 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-challenger 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-circle 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-commit 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-fri 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-bn254-fr 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-challenger 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-circle 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-commit 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-dft 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-field 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-fri 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "p3-goldilocks", - "p3-keccak 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-keccak-air 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-koala-bear 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-mds 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-merkle-tree 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-mersenne-31 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-poseidon2 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-uni-stark 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", - "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=476cff48)", + "p3-keccak 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-keccak-air 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-koala-bear 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-matrix 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-maybe-rayon 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-mds 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-merkle-tree 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-mersenne-31 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-poseidon2 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-symmetric 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-uni-stark 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", + "p3-util 0.1.0 (git+https://github.com/brevis-network/Plonky3.git?rev=a4d376b)", "paste", "pico-derive", "rand 0.8.5", diff --git a/zkvm_execution_layer/Cargo.toml b/zkvm_execution_layer/Cargo.toml index 8e756d835af..2c54ed3ba3f 100644 --- a/zkvm_execution_layer/Cargo.toml +++ b/zkvm_execution_layer/Cargo.toml @@ -13,7 +13,7 @@ tokio = { version = "1", features = ["full"] } thiserror = "2" types = { path = "../consensus/types" } execution_layer = { path = "../beacon_node/execution_layer" } -pico-vm = { git = "https://github.com/ethproofs/pico.git", package = "pico-vm", branch = "wasm-stark-verifier" } +pico-prism-vm = { git = "https://github.com/brevis-network/pico.git", package = "pico-vm", branch = "main" } proofman-verifier = { git = "https://github.com/0xPolygonHermez/pil2-proofman.git", tag = "v0.12.0" } zkm-verifier = { git = "https://github.com/ProjectZKM/Ziren", tag = "v1.2.1" } bincode = { workspace = true } diff --git a/zkvm_execution_layer/src/verifiers/pico.rs b/zkvm_execution_layer/src/verifiers/pico.rs index eaa178d6941..ad9c3cee1ce 100644 --- a/zkvm_execution_layer/src/verifiers/pico.rs +++ b/zkvm_execution_layer/src/verifiers/pico.rs @@ -1,24 +1,30 @@ -//! Pico zkVM STARK proof verifier +//! Pico Prism zkVM STARK proof verifier //! -//! This module implements proof verification for Pico zkVM using KoalaBear field arithmetic. +//! This module implements proof verification for Pico Prism zkVM using KoalaBear field arithmetic. use super::{ProofVerifier, VerificationResult}; -use pico_vm::{ - configs::{config::StarkGenericConfig, stark_config::KoalaBearPoseidon2}, +use pico_prism_vm::{ + configs::{ + config::{StarkGenericConfig, Val}, + stark_config::KoalaBearPoseidon2, + }, instances::{ chiptype::recursion_chiptype::RecursionChipType, machine::combine::CombineMachine, }, - machine::{keys::BaseVerifyingKey, machine::MachineBehavior, proof::MetaProof}, + machine::{ + keys::BaseVerifyingKey, + machine::MachineBehavior, + proof::{BaseProof, MetaProof}, + }, primitives::consts::RECURSION_NUM_PVS, }; use serde::{Deserialize, Serialize}; use tracing::debug; -/// Serializable wrapper for KoalaBear MetaProof -/// Required because MetaProof contains Rc which isn't directly serializable +// Serializable wrappers for MetaProof #[derive(Serialize, Deserialize)] struct SerializableKoalaBearMetaProof { - proofs: Vec>, + proofs: Vec>, vks: Vec>, pv_stream: Option>, } @@ -29,7 +35,30 @@ impl SerializableKoalaBearMetaProof { } } -/// Pico verifier using KoalaBear field +struct KoalaBearCombineVerifier { + machine: CombineMachine>>, +} + +impl KoalaBearCombineVerifier { + fn new() -> Self { + let machine = CombineMachine::new( + KoalaBearPoseidon2::new(), + RecursionChipType::combine_chips(), + RECURSION_NUM_PVS, + ); + Self { machine } + } + + fn verify( + &self, + proof: &MetaProof, + riscv_vk: &BaseVerifyingKey, + ) -> bool { + self.machine.verify(proof, riscv_vk).is_ok() + } +} + +/// Pico Prism verifier using KoalaBear field pub struct PicoVerifier; impl ProofVerifier for PicoVerifier { @@ -46,17 +75,13 @@ impl ProofVerifier for PicoVerifier { .map_err(|e| format!("Failed to deserialize proof: {}", e))?; let proof = serializable_proof.to_meta_proof(); - // Deserialize the KoalaBear verification key + // Deserialize KoalaBear verification key let riscv_vk: BaseVerifyingKey = bincode::deserialize(vk_data) .map_err(|e| format!("Failed to deserialize verification key: {}", e))?; - // Create the machine and run verification - let machine = CombineMachine::new( - KoalaBearPoseidon2::new(), - RecursionChipType::combine_chips(), - RECURSION_NUM_PVS, - ); - let result = machine.verify(&proof, &riscv_vk).is_ok(); + // Create and run verifier + let verifier = KoalaBearCombineVerifier::new(); + let result = verifier.verify(&proof, &riscv_vk); debug!(verification_result = result, "Completed Pico verification"); @@ -76,15 +101,4 @@ mod tests { fn test_pico_verifier_name() { assert_eq!(PicoVerifier::name(), "pico"); } - - #[test] - fn test_pico_verifier_invalid_proof() { - let invalid_proof = vec![1, 2, 3, 4]; - let invalid_vk = vec![5, 6, 7, 8]; - - // Should fail to deserialize - let result = PicoVerifier::verify(&invalid_proof, &invalid_vk); - assert!(result.is_err()); - assert!(result.unwrap_err().contains("Failed to deserialize proof")); - } } From 058634a0dd30b6c1cdb90f69625dd6be48c210dd Mon Sep 17 00:00:00 2001 From: fbwoolf <6493321+fbwoolf@users.noreply.github.com> Date: Tue, 4 Nov 2025 13:25:22 -0500 Subject: [PATCH 11/47] chore: add zkattester readme --- Cargo.lock | 4 +-- consensus/types/src/execution_proof.rs | 4 +-- zkvm_execution_layer/Cargo.toml | 2 +- zkvm_execution_layer/README.md | 38 ++++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 zkvm_execution_layer/README.md diff --git a/Cargo.lock b/Cargo.lock index 16efbf96ab9..cfdc792ecfc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8559,7 +8559,7 @@ dependencies = [ [[package]] name = "pico-derive" version = "0.1.0" -source = "git+https://github.com/brevis-network/pico.git?branch=main#f6a24234c0637ded3cb6ff797cbc2e7a4f679795" +source = "git+https://github.com/ethproofs/pico.git?branch=ethproofs-pico-prism#5fa05fc4e105fd65bb01912e2d1ffce92c836a86" dependencies = [ "proc-macro2", "quote", @@ -8569,7 +8569,7 @@ dependencies = [ [[package]] name = "pico-vm" version = "1.1.6" -source = "git+https://github.com/brevis-network/pico.git?branch=main#f6a24234c0637ded3cb6ff797cbc2e7a4f679795" +source = "git+https://github.com/ethproofs/pico.git?branch=ethproofs-pico-prism#5fa05fc4e105fd65bb01912e2d1ffce92c836a86" dependencies = [ "anyhow", "arrayref", diff --git a/consensus/types/src/execution_proof.rs b/consensus/types/src/execution_proof.rs index 95e984a2f27..e2546f7253f 100644 --- a/consensus/types/src/execution_proof.rs +++ b/consensus/types/src/execution_proof.rs @@ -8,13 +8,13 @@ use tree_hash_derive::TreeHash; use super::ExecutionProofId; -/// TODO(ethproofs): Set to 2MB for the demo. +/// TODO(ethproofs): Set to 3MB for the demo. /// /// Maximum size of proof data in bytes /// /// Note: Most proofs will fit within 300KB. Some zkVMs have 1MB proofs (currently) /// and so this number was set to accommodate for the most zkVMs. -pub const MAX_PROOF_DATA_BYTES: usize = 2_097_152; +pub const MAX_PROOF_DATA_BYTES: usize = 3_145_728; /// TODO(ethproofs): Set to 1 for the demo. /// diff --git a/zkvm_execution_layer/Cargo.toml b/zkvm_execution_layer/Cargo.toml index 2c54ed3ba3f..a6974f56d00 100644 --- a/zkvm_execution_layer/Cargo.toml +++ b/zkvm_execution_layer/Cargo.toml @@ -13,7 +13,7 @@ tokio = { version = "1", features = ["full"] } thiserror = "2" types = { path = "../consensus/types" } execution_layer = { path = "../beacon_node/execution_layer" } -pico-prism-vm = { git = "https://github.com/brevis-network/pico.git", package = "pico-vm", branch = "main" } +pico-prism-vm = { git = "https://github.com/ethproofs/pico.git", package = "pico-vm", branch = "ethproofs-pico-prism" } proofman-verifier = { git = "https://github.com/0xPolygonHermez/pil2-proofman.git", tag = "v0.12.0" } zkm-verifier = { git = "https://github.com/ProjectZKM/Ziren", tag = "v1.2.1" } bincode = { workspace = true } diff --git a/zkvm_execution_layer/README.md b/zkvm_execution_layer/README.md new file mode 100644 index 00000000000..fc89fa4e974 --- /dev/null +++ b/zkvm_execution_layer/README.md @@ -0,0 +1,38 @@ +# Running the zkAttester client + +### WARNING: THIS CODE IS EXPERIMENTAL - FOR DEMO ONLY + +**Steps to run the modified Lighthouse client:** + +1. Clone the repo: `https://github.com/ethproofs/lighthouse` +2. `git checkout ethproofs/zkattester-demo` +3. Run `make` to build the new binary +4. Install the new binary: `sudo cp ~/.cargo/bin/lighthouse /usr/local/bin/` +5. Install Docker if needed +6. For the dummy EL run: `docker build -f dummy_el/Dockerfile -t dummy_el:latest .` +7. Run (e.g. Linux Debian): + +```bash +docker run -d \ + -p 8551:8551 \ + --name dummy-el \ + dummy_el:latest \ + /usr/local/bin/dummy_el \ + --port 8551 \ + --jwt-secret /path/to/jwt.hex +``` + +8. Stop your EL and CL if needed +9. Start your LH client with the `--activate-zkvm` flag: + +```bash + lighthouse bn \ + --mainnet \ + --execution-endpoint http://localhost:8551 \ + --execution-jwt /path/to/jwt.hex \ + --activate-zkvm \ + --debug-level debug \ + # ...other flags +``` + +10. For debug logs: `sudo journalctl -u lighthouse-beacon -f | grep -i "Ethproofs"` From bdf596374fc42b85db46e44f905c2aa0d9ac8825 Mon Sep 17 00:00:00 2001 From: fbwoolf <6493321+fbwoolf@users.noreply.github.com> Date: Tue, 4 Nov 2025 19:50:35 -0500 Subject: [PATCH 12/47] refactor: zkcloud zisk verifier wrapper --- zkvm_execution_layer/src/ethproofs_demo.rs | 2 +- zkvm_execution_layer/src/verifiers/mod.rs | 13 +++--- zkvm_execution_layer/src/verifiers/zkcloud.rs | 43 +++++++++++++++++++ 3 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 zkvm_execution_layer/src/verifiers/zkcloud.rs diff --git a/zkvm_execution_layer/src/ethproofs_demo.rs b/zkvm_execution_layer/src/ethproofs_demo.rs index 622249d3173..223d11b108e 100644 --- a/zkvm_execution_layer/src/ethproofs_demo.rs +++ b/zkvm_execution_layer/src/ethproofs_demo.rs @@ -45,7 +45,7 @@ pub async fn fetch_proof_from_ethproofs( block_hash: types::ExecutionBlockHash, cluster: String, ) -> Result, String> { - const MAX_WAIT_TIME_SECS: u64 = 15; + const MAX_WAIT_TIME_SECS: u64 = 20; const INITIAL_DELAY_MS: u64 = 100; const MAX_DELAY_MS: u64 = 5000; diff --git a/zkvm_execution_layer/src/verifiers/mod.rs b/zkvm_execution_layer/src/verifiers/mod.rs index 64debfd5d21..53a0c59eff1 100644 --- a/zkvm_execution_layer/src/verifiers/mod.rs +++ b/zkvm_execution_layer/src/verifiers/mod.rs @@ -5,6 +5,7 @@ pub mod pico; pub mod zisk; +pub mod zkcloud; pub mod zkm; use std::collections::HashMap; @@ -26,7 +27,7 @@ pub mod ethproofs_ids { /// ZisK verifier UUID (proof_id = 1) pub const ZISK_UUID: &str = "33f14a82-47b7-42d7-9bc1-b81a46eea4fe"; - /// ZKCloud verifier UUID (proof_id = 2) + /// ZkCloud verifier UUID (proof_id = 2) pub const ZKCLOUD_UUID: &str = "884fcc21-d522-4b4a-b535-7cfde199485c"; /// ZKM verifier UUID (proof_id = 3) @@ -42,7 +43,7 @@ pub mod ethproofs_ids { Uuid::parse_str(ZISK_UUID).expect("Valid UUID") } - /// Parse a ZKCloud UUID + /// Parse a ZkCloud UUID pub fn zkcloud() -> Uuid { Uuid::parse_str(ZKCLOUD_UUID).expect("Valid UUID") } @@ -126,7 +127,7 @@ impl VerifierStore { /// For Ethproofs demo testing, this provides a hardcoded mapping of proof_ids to prover UUIDs: /// - proof_id 0 → brevis (Pico verifier) /// - proof_id 1 → zisk (ZisK verifier) - /// - proof_id 2 → zkcloud (ZisK verifier) + /// - proof_id 2 → zkcloud (ZkCloud verifier) /// - proof_id 3 → zkm (ZKM verifier) pub fn get_prover_uuid_for_proof_id(&self, proof_id: ExecutionProofId) -> Option { let id = proof_id.as_u8() as u32; @@ -159,11 +160,11 @@ impl VerifierStore { zisk::ZiskVerifier::verify, ); - // Register ZKCloud verifier (uses ZisK verifier) + // Register ZkCloud verifier (uses ZisK) store.register( ethproofs_ids::zkcloud(), - zisk::ZiskVerifier::name(), - zisk::ZiskVerifier::verify, + zkcloud::ZkcloudVerifier::name(), + zkcloud::ZkcloudVerifier::verify, ); // Register ZKM verifier diff --git a/zkvm_execution_layer/src/verifiers/zkcloud.rs b/zkvm_execution_layer/src/verifiers/zkcloud.rs new file mode 100644 index 00000000000..34e53732676 --- /dev/null +++ b/zkvm_execution_layer/src/verifiers/zkcloud.rs @@ -0,0 +1,43 @@ +//! ZkCloud proof verifier +//! +//! This module implements proof verification for ZkCloud using ZisK. + +use super::{ProofVerifier, VerificationResult}; +use tracing::debug; + +/// ZkCloud verifier (uses ZisK) +pub struct ZkcloudVerifier; + +impl ProofVerifier for ZkcloudVerifier { + fn verify(proof_data: &[u8], vk_data: &[u8]) -> VerificationResult { + debug!( + proof_size = proof_data.len(), + vk_size = vk_data.len(), + "Starting ZkCloud verification" + ); + + // Delegate to ZisK verifier implementation + let result = super::zisk::ZiskVerifier::verify(proof_data, vk_data)?; + + debug!( + verification_result = result, + "Completed ZkCloud verification" + ); + + Ok(result) + } + + fn name() -> &'static str { + "zkcloud" + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_zkcloud_verifier_name() { + assert_eq!(ZkcloudVerifier::name(), "zkcloud"); + } +} From 06889ba7e69ecd7452248bb35700105c834591a4 Mon Sep 17 00:00:00 2001 From: fbwoolf <6493321+fbwoolf@users.noreply.github.com> Date: Wed, 5 Nov 2025 16:06:14 -0500 Subject: [PATCH 13/47] refactor: create mock validator for test --- Cargo.lock | 32 ++++++++++++- rust-toolchain.toml | 3 ++ zkvm_execution_layer/Cargo.toml | 1 + .../src/dummy_proof_verifier.rs | 47 ++++++++++++++++--- zkvm_execution_layer/src/ethproofs_demo.rs | 15 ++++++ 5 files changed, 89 insertions(+), 9 deletions(-) create mode 100644 rust-toolchain.toml diff --git a/Cargo.lock b/Cargo.lock index cfdc792ecfc..1f6b279d457 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1157,7 +1157,7 @@ dependencies = [ "maplit", "merkle_proof", "metrics", - "mockall", + "mockall 0.13.1", "mockall_double", "once_cell", "oneshot_broadcast", @@ -6806,6 +6806,21 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9366861eb2a2c436c20b12c8dbec5f798cea6b47ad99216be0282942e2c81ea0" +[[package]] +name = "mockall" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43766c2b5203b10de348ffe19f7e54564b64f3d6018ff7648d1e2d6d3a0f0a48" +dependencies = [ + "cfg-if", + "downcast", + "fragile", + "lazy_static", + "mockall_derive 0.12.1", + "predicates", + "predicates-tree", +] + [[package]] name = "mockall" version = "0.13.1" @@ -6815,11 +6830,23 @@ dependencies = [ "cfg-if", "downcast", "fragile", - "mockall_derive", + "mockall_derive 0.13.1", "predicates", "predicates-tree", ] +[[package]] +name = "mockall_derive" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af7cbce79ec385a1d4f54baa90a76401eb15d9cab93685f62e7e9f942aa00ae2" +dependencies = [ + "cfg-if", + "proc-macro2", + "quote", + "syn 2.0.108", +] + [[package]] name = "mockall_derive" version = "0.13.1" @@ -13765,6 +13792,7 @@ dependencies = [ "execution_layer", "hashbrown 0.15.5", "lru", + "mockall 0.12.1", "once_cell", "pico-vm", "proofman-verifier", diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 00000000000..785bba632c9 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,3 @@ +[toolchain] +channel = "nightly-2025-08-04" +components = ["clippy", "rustfmt", "rust-analyzer"] diff --git a/zkvm_execution_layer/Cargo.toml b/zkvm_execution_layer/Cargo.toml index a6974f56d00..5bc95e741a7 100644 --- a/zkvm_execution_layer/Cargo.toml +++ b/zkvm_execution_layer/Cargo.toml @@ -27,3 +27,4 @@ tracing = { workspace = true } [dev-dependencies] +mockall = "0.12" diff --git a/zkvm_execution_layer/src/dummy_proof_verifier.rs b/zkvm_execution_layer/src/dummy_proof_verifier.rs index 3c383b91b6c..1e2a39b6874 100644 --- a/zkvm_execution_layer/src/dummy_proof_verifier.rs +++ b/zkvm_execution_layer/src/dummy_proof_verifier.rs @@ -1,5 +1,6 @@ -use crate::ethproofs_demo::validate_proof; +use crate::ethproofs_demo::{EthproofsValidator, ProofValidator}; use crate::proof_verification::{ProofVerificationResult, ProofVerifier, VerificationError}; +use std::sync::Arc; use std::time::Duration; use tracing::debug; use types::{ExecutionProof, ExecutionProofId}; @@ -12,6 +13,7 @@ use types::{ExecutionProof, ExecutionProofId}; pub struct DummyVerifier { proof_id: ExecutionProofId, verification_delay: Duration, + validator: Arc, } impl DummyVerifier { @@ -20,6 +22,7 @@ impl DummyVerifier { Self { proof_id, verification_delay: Duration::from_millis(0), + validator: Arc::new(EthproofsValidator), } } @@ -28,6 +31,20 @@ impl DummyVerifier { Self { proof_id, verification_delay: delay, + validator: Arc::new(EthproofsValidator), + } + } + + /// Create a new dummy verifier with a custom validator (for testing) + #[cfg(test)] + fn with_validator( + proof_id: ExecutionProofId, + validator: Arc, + ) -> Self { + Self { + proof_id, + verification_delay: Duration::from_millis(0), + validator, } } } @@ -50,8 +67,8 @@ impl ProofVerifier for DummyVerifier { "[Ethproofs] Verifying proof" ); - // Perform cryptographic verification using Ethproofs verifiers - Ok(validate_proof(proof)) + // Perform cryptographic verification using the injected validator + Ok(self.validator.validate(proof)) } fn proof_id(&self) -> ExecutionProofId { @@ -62,13 +79,20 @@ impl ProofVerifier for DummyVerifier { #[cfg(test)] mod tests { use super::*; - use types::{ExecutionBlockHash, FixedBytesExtended}; + use mockall::mock; + use types::{ExecutionBlockHash, FixedBytesExtended, Hash256, Slot}; + + mock! { + TestValidator {} + impl ProofValidator for TestValidator { + fn validate(&self, proof: &ExecutionProof) -> bool; + } + } fn create_test_proof( subnet_id: ExecutionProofId, block_hash: types::ExecutionBlockHash, ) -> ExecutionProof { - use types::{Hash256, Slot}; ExecutionProof::new( subnet_id, Slot::new(100), @@ -82,10 +106,17 @@ mod tests { #[tokio::test] async fn test_dummy_verifier_success() { let subnet = ExecutionProofId::new(0).unwrap(); - let verifier = DummyVerifier::new(subnet); let block_hash = ExecutionBlockHash::zero(); let proof = create_test_proof(subnet, block_hash); + let mut mock_validator = MockTestValidator::new(); + mock_validator + .expect_validate() + .withf(move |p| p.proof_id == subnet) + .returning(|_| true); + + let verifier = DummyVerifier::with_validator(subnet, Arc::new(mock_validator)); + let result = verifier.verify(&proof); assert!(result.is_ok()); assert!(result.unwrap()); @@ -95,10 +126,12 @@ mod tests { async fn test_dummy_verifier_wrong_subnet() { let subnet_0 = ExecutionProofId::new(0).unwrap(); let subnet_1 = ExecutionProofId::new(1).unwrap(); - let verifier = DummyVerifier::new(subnet_0); let block_hash = ExecutionBlockHash::zero(); let proof = create_test_proof(subnet_1, block_hash); + let mock_validator = MockTestValidator::new(); + let verifier = DummyVerifier::with_validator(subnet_0, Arc::new(mock_validator)); + let result = verifier.verify(&proof); assert!(result.is_err()); assert!(matches!( diff --git a/zkvm_execution_layer/src/ethproofs_demo.rs b/zkvm_execution_layer/src/ethproofs_demo.rs index 223d11b108e..b6aae70dfe6 100644 --- a/zkvm_execution_layer/src/ethproofs_demo.rs +++ b/zkvm_execution_layer/src/ethproofs_demo.rs @@ -7,6 +7,21 @@ use std::time::{Duration, Instant}; use tracing::{debug, warn}; use types::ExecutionProof; +/// Trait for validating proofs +pub trait ProofValidator: Send + Sync { + /// Validate a proof using the verifier store + fn validate(&self, proof: &ExecutionProof) -> bool; +} + +/// Default implementation using the Ethproofs verifier store +pub struct EthproofsValidator; + +impl ProofValidator for EthproofsValidator { + fn validate(&self, proof: &ExecutionProof) -> bool { + validate_proof(proof) + } +} + /// Global verification key store, loaded once on first access pub static VERIFICATION_KEY_STORE: Lazy> = Lazy::new(|| match VerificationKeyStore::load_embedded() { From 6a9a339ad797ba9cf68f1cc2de5b8f9cae3bfa88 Mon Sep 17 00:00:00 2001 From: fbwoolf <6493321+fbwoolf@users.noreply.github.com> Date: Thu, 6 Nov 2025 16:53:43 -0300 Subject: [PATCH 14/47] refactor: fallback verification with dummy proof --- consensus/types/src/execution_proof_id.rs | 16 ++++++++++ zkvm_execution_layer/src/dummy_proof_gen.rs | 26 +++++++++++----- zkvm_execution_layer/src/ethproofs_demo.rs | 9 ++++++ ...a5b-ee8d-49b3-8207-86c7debf8e13_542871.bin | Bin 0 -> 990448 bytes zkvm_execution_layer/src/verifiers/pico.rs | 29 ++++++++++++++++++ 5 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 zkvm_execution_layer/src/test_proofs/brevis_79041a5b-ee8d-49b3-8207-86c7debf8e13_542871.bin diff --git a/consensus/types/src/execution_proof_id.rs b/consensus/types/src/execution_proof_id.rs index c180f5e0412..305f87fda83 100644 --- a/consensus/types/src/execution_proof_id.rs +++ b/consensus/types/src/execution_proof_id.rs @@ -9,6 +9,11 @@ use tree_hash::TreeHash; /// TODO(zkproofs): The number 8 is a parameter that we will want to configure in the future pub const EXECUTION_PROOF_TYPE_COUNT: u8 = 8; +/// TODO(ethproofs): Added to handle when proof generation fails. +/// +/// Special proof ID reserved for fallback proofs +pub const FALLBACK_EXECUTION_PROOF_ID: u8 = 255; + /// ExecutionProofId identifies which zkVM/proof system a proof belongs to. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)] pub struct ExecutionProofId(u8); @@ -81,11 +86,22 @@ impl ExecutionProofId { } } + /// Creates a fallback ExecutionProofId (255) + /// Used for dummy proofs when Ethproofs API fails or times out + pub fn fallback() -> Self { + Self(FALLBACK_EXECUTION_PROOF_ID) + } + /// Returns the inner u8 value pub fn as_u8(&self) -> u8 { self.0 } + /// Check if this is a fallback proof ID + pub fn is_fallback(&self) -> bool { + self.0 == FALLBACK_EXECUTION_PROOF_ID + } + /// Returns the subnet ID as a usize pub fn as_usize(&self) -> usize { self.0 as usize diff --git a/zkvm_execution_layer/src/dummy_proof_gen.rs b/zkvm_execution_layer/src/dummy_proof_gen.rs index a6fe12f53e2..f8d90c8e19e 100644 --- a/zkvm_execution_layer/src/dummy_proof_gen.rs +++ b/zkvm_execution_layer/src/dummy_proof_gen.rs @@ -6,6 +6,7 @@ use async_trait::async_trait; use std::time::Duration; use tokio::time::sleep; use tracing::{debug, warn}; +use types::execution_proof_id::FALLBACK_EXECUTION_PROOF_ID; use types::{ExecutionBlockHash, ExecutionProof, ExecutionProofId, Hash256, Slot}; /// TODO(ethproofs): Implementation of proof generation for demo. @@ -36,9 +37,9 @@ impl DummyProofGenerator { } } - /// TODO(ethproofs): Used when Ethproofs API fails or verification fails. + /// TODO(ethproofs): Fallback when the Ethproofs API fails or test verification fails. /// - /// Create a fallback dummy proof + /// Create a fallback dummy proof with a reserved fallback proof ID fn create_dummy_proof( &self, slot: Slot, @@ -46,13 +47,23 @@ impl DummyProofGenerator { block_root: &Hash256, ) -> ProofGenerationResult { let dummy_data = format!( - "ethproofs_fallback_subnet_{:?}_slot_{:?}_hash_{:?}", - self.proof_id, slot, payload_hash + "ethproofs_fallback_proof_id_{}_slot_{}_hash_{}", + FALLBACK_EXECUTION_PROOF_ID, + slot.as_u64(), + payload_hash ) .into_bytes(); - ExecutionProof::new(self.proof_id, slot, *payload_hash, *block_root, dummy_data) - .map_err(ProofGenerationError::ProofGenerationFailed) + // Use the fallback proof ID to mark this as a dummy proof + let fallback_proof_id = ExecutionProofId::fallback(); + ExecutionProof::new( + fallback_proof_id, + slot, + *payload_hash, + *block_root, + dummy_data, + ) + .map_err(ProofGenerationError::ProofGenerationFailed) } } @@ -178,7 +189,8 @@ mod tests { assert!(result.is_ok()); let proof = result.unwrap(); - assert_eq!(proof.proof_id, subnet); + + assert!(proof.proof_id.is_fallback()); assert_eq!(proof.slot, slot); assert_eq!(proof.block_hash, block_hash); assert_eq!(proof.block_root, block_root); diff --git a/zkvm_execution_layer/src/ethproofs_demo.rs b/zkvm_execution_layer/src/ethproofs_demo.rs index b6aae70dfe6..f7e4dd8f7d6 100644 --- a/zkvm_execution_layer/src/ethproofs_demo.rs +++ b/zkvm_execution_layer/src/ethproofs_demo.rs @@ -162,6 +162,15 @@ pub async fn download_proof_binary(proof_id: u64) -> Result, String> { /// 2. Running the cryptographic verification function /// 3. Returning whether the proof is valid pub fn validate_proof(proof: &ExecutionProof) -> bool { + // Check if this is a fallback proof (created when Ethproofs API failed/timed out) + if proof.proof_id.is_fallback() { + debug!( + proof_id = %proof.proof_id, + "[Ethproofs] Fallback proof detected, skipping verification" + ); + return true; + } + // Get the prover UUID for this proof_id from the hardcoded mapping let prover_uuid = match VERIFIER_STORE.get_prover_uuid_for_proof_id(proof.proof_id) { Some(uuid) => uuid, diff --git a/zkvm_execution_layer/src/test_proofs/brevis_79041a5b-ee8d-49b3-8207-86c7debf8e13_542871.bin b/zkvm_execution_layer/src/test_proofs/brevis_79041a5b-ee8d-49b3-8207-86c7debf8e13_542871.bin new file mode 100644 index 0000000000000000000000000000000000000000..b11ef1ae0196f7dd1aed32f6a53bd390c70b72cc GIT binary patch literal 990448 zcmbsPbx;&u)CY`HOLxc8-LNdRG)peA)Y9EcH@mQego31~ARyAMbP7nLASIzlBO#zP zND2O)ncvs<4`<$aW}bKdxpVikbIv_+Kj)k~i;eaF|6FKqXoG&;Zz0OJfqnzlB; zE)tbw3<)NP7vaK=VR^L_jbI!NcXb=vdpruWZ+)?@N~>{>^C_$027*rZoi6jHGAq+z zdKo`OYXp;ni2Cv&+5B9f+fo~T6>LD*Up+s3U6^}1&^|V|AmqkRd@^jMBPW9`Y`44A zT}@lxTCVRsl@9M>e3d!~PNQFcvO=wVhat5>vFTnlbc)0)B-)p#Q6Rk#;1wq-|%yWbugZD5S)@TKvfVv!_JMo{Nh^N%w)ts4(-4tfqzX6;WSC3SXSltWNM_ z0ly+9FS?hH7P(NQFeJ{HpUlgcceEM13ZdWhrZpux8qsn$AlAo%Fw>l{3UgV8hlE!L z-4-P_VTP`hY$Agvi!ymGt9&u~+O%N5J@wh>BL{W2I)V)qd`s-*robu^Mo>JWD3r`> z!T9}hD)i9SPDz!72Wz#6({(7>2667%E?1-RnquTc6M8I&=9l#OF6EGDDg*1iCG`DD z=Zc9Avg28o6=E@a0$$!G_Y5-7_5EwthevQW{W}s5lgtk=NC`~gtGSkV=gmVYhno@x zBxq4A-TRqkmf(VgfFy`mBSO;Qq*utN@VbXC-`z|A*v5#if1ac()66f-86Kw{>vrv3 ziy1@V$j)JA#^c>{2?Z#wPqdi<2k{P)@s)5%Z*eK!yE)$!+X237jb77J<3YEa8J_@( z@L287wOr(!14PiUrf6)22Q_3Wj(E-Ua)U{ui$Rl}va3)*2HdhKtBZw`i~>IVCeg*M%i= zg4-3?)kXVo_@nB!yPKYOnx){t+m}S82490SQjZB8W)>CksrkM9ku@g6^CuA+wV4*Q z7Y8oza2!S}zqk08=q2AY9~+8C*DfI5qCgfGFxc>ij-S}RYL@?F(iPDr6;UP4dM6OC zLZgEW>J=WO32hxunGVEmTM{MYS`{V5_7W9q-C$JwU1<2BJX$NzQX_Y5of18;nh$XMRB#@H7O<*>;BE);B2> zyneR@E8neAAi*&rO27~q#u?yJ(;P$eG9Q#sC4VwdqfF6-wytM~5_D~9Hb+d;2lj5^ zAG0=jqV7p>tMwE_8g5JF-?U!o{M<>_6Ab)73ExnR*qfV$m(M?>(Iu*tA0Hke!r%#VarUXv#`-BfoDki(;2~syG}3 zNiR%uN(Yw-Qd|FF=SJHWONxkFD1p!}IJ0eYq3v)#eeV1gaQ~BKlLG2>f_$?~A=jRG zwoD6rCDTs}TEw{%?(tqL(Cv;;?SSz|niH1s0t+b*q#A6^oGLLR!kRB$s2?P6>r?+{ z*Izzj>qs_4MIQs{ObGCAiAzH=NY|yYil3`aTvcf%XtwdWY&waMH$App$&D1M?1i(Q zz7Z1~`AHbfVLi_2a#x`R8jJF`XkIal)vc5PBnSZ|)c2U<+YU`j=D39IvdM)0>e>GS zgS{C4ifhpY7Py|p0An3>;g4dTlGJlH!B2-^6#tvv*)V1O)7Tzs)0r~#GnXkPRc}&` zs5(X%d*QM?pUp1__J4N$yZpa>Px#*tVT7G}@0nF4>JpsXD21(UfuXIeyhO!x^p$I7 z$E!e(kV^&{NSuzVQB#vO{c0w!qSkLg#nlZ*rRGKt3sgFDD_IdCj_ii+9hyf1$A-*U zrSO=UViE_tzqVU+;7yS__01K@(?%b&bW5dK(ej-wJjR_V_2kK>NFYjOKr@IYP! zayh2t;{~)m{{UIdiJ{?QNKlU!6pH*e?@3;xSx&s>EuT7f3vbjsv#1v-a(Lzy&qJj9 z)XvK)()JVeaTG?MPgtP=;&&N1K{&1c_Qxo2k9LM(ZSnthgu zk!dwYX2pSl(f`W--}e9NN6EZlRdF?!QmuL~q0HLHF+SZE{2dqw-6_VwW}QQM6E0+c z2?g)CF&;aF!6Y=He&7tC2UQWNRGAQOjDQgAf7AEZ52|B{oL`6BPqm3>M->41@76*!7N0XyuG?U?Ups>dn&;YFr6vTHn6#SPez9sWTR0cqj4+ z1a6UgpaL_LkfE>>sbj_o_D}vj<}Nc&#((AiZ~K4spXFh>Tr+$?rP^zI4s;}{f!rPf zrfP9SWVVsveWyQFEs;3dW#a1A<;NuI`RQwd=@&bqvfLuz>^c&m&h#mU|4kq9fBCS# zGZuP#ykNJ?4JArX|H;~OF{!fecgdxfz^vG$P#7K7Sj@p*xo$<)s;wS&d?0+H6=#T( z(9K^ZrL6Hf5hJhect}N%#e!%6@IWvXl!5=sdt=w^RAO}(&KdO9QgGn_4g3YRdxn+9 zRyLE2-)fpqAcg);O8d(e2S{tI%p*!4^?VUaiqln;u3F-ZJ{{OZrMKZ3`w^?eAH~8b1O<$2VN3 zm_75N#h6r>fLBO*Uvu1PZV4*$cKhtVN|>QRjU`O}(i(s$}@EGMNYSaTab zN3c#y7m*Civ;av(hl%Rx*&g=|^9`Ra3hk~xmU}7eO^hS_PBw$S)0pqU8Pm6ydJvMd zKOA-Wc={nZ&5;|E3ux)=JZPLT)MyIJ*NP)w!j@#oMU*#y)5ou5*(JGfhGXaZ0-OwP zEp1VkC3Acq3z?lta%A2t8FVs!fe~&C(A~GyhMxL?qwppJBcq>#^}>CV#f=3O z?G!P(_>k^Bla%`a?yN9;Y8^#-eO_4#?Ns0sgW>%HVQ4k8%*%J4wy*cnxxYnUDW^QE z0R|ToGB_-L@CtZ;6lS+B<3F~Fi%!lPS8^zQ6|}NY6ohR50Dhno>teQmF^>GOOf7@= zRB>456^H6-7h&3p89%s9(JpR~k@Ef4zMEe?11C+ls;A1OOf);}l=W{MK(_ckA~b7eHj^XXUV-;IJzeEgCv&Cvm6o+k4dg$3H0-+hE&1G29iWX!>YT1 zRTs>01Vq3X(qQlOjr%vf^wDy-Te*@?Okoy}KY1KNboT_m$(Y#XUg}IwEY*zV9D578 zf^FgLa)ZOiR3^>wE#67dWI0`Eyrz}`@_mfCGt|MWqk2#ADc1v8Y*j+=6wAk-p#l)#TAIaaf!iSc zc9}Tj=R^yW(^oN@)9z?dm9d}vW+4Q87=*dezjYPi^-5^VcE!x|TL&qN$bs%Dwh70L zTLkiTW*ki8;SxVfBbR2bIf3U7H6)#g9w{C~&P1Sp7md*TEM-79;Ya1WuWh0;AhpRa`m~-v1c_m@m&@4XZ5#0QoDk{%DYL|PdVim->nDne`vq4Fn zOqeH>nf?gX}+$7E68}(=PaQ;?>UkEkD z6WV@8JsCNRWPIKb!);;n^ED<$`y@X-s>%3hIgOl?bJaIzHSYZuwNS{g3k7A2s?6i^w3hh z=T-?9CQopXGcyl^5XKJjVmU~b2Upw)Jp0JQnpjL0!QYV?Mx~w~4qiyMg5yR+e*Vf4 znO$n;R2=N-bzo5^%|)afg5S+5^|$X=k!?qR$tM!~4BaBA&=xh{82IfARei0`mzs`@ zw4O5b7a0*o!-s)Ey2i$suzd;lu3!(5q7{6<{z-*&oao@~ejx?f=vA99kKJ_KN4tnU z$!DnSA~Fbz!0*vq8=n8qd@<5H?Ju(_iHx$Z=Dd0P#knfJ3#!ohT1ZcLTT%7NbQC)k z!llEiiG^0{f{9CNo#wlV9;+pvgCpCc7n;uk$|#jdhIsyf9i&>Syo5<)e_50l`Ksxc zk&r)miNsF&dP(s&t~efJoCB<1g;k=uamKJQ+=c=?UeEKh0^2 zLjt%TbO?w=9F{qOxh|h!>jbF3nS(ykJ&n>U)(4*0Km3UtB`0E!fw; zm-t5W)}a7$GC7B5em);)Qu2`4#`hG|4^<5=q^fevLDCQksyP~Ax253Ji1nx?beIZj zuS_X`ATc_clhR6)3f&G0-)XoxTolD$zYLC0J69EZ^WMT?^EV-2?Z=jMTc9G%!&Md~)Ls$ohrxKZ-c4q(&8Q4uUgNk4mWl79n87*A*v zM=B=JB;`1M|MEK3hPD?I8=TEj!N>l==>;oo5uujvQm#kC+GiVJ7+AxWhr>GX z$@qft;x!~=cbLr6il}lJHD&GV86ocrv?3ItnS}XBB1}VFj`shR*I5y8(y1@1V&B-) z0rmbH;#B|jaew+l;dqTkWeOr{?J%K8%m~1IHJdWy8YWGrvSQugQm({Z zN<&Ywyk$ixhO{m?)v``sU4VO@ZKz6tM6FVE<7`x!)1kKyKZJjL5|1h~(;?t7+YlbO zfdgz?f_MVE;8e}vV6dIuSNkW_k(B49l{U4UNWUQbR^6X{Ts*ojt<^NUfsvI$G`_@z zGk$hV+K^yQe(_vVHs#5Q8Q!qAC~kuP{5lh8qd+xLMbRj~Y{+k7AF+X1#0e?(VM|O* zcZgak2u)N==3XJf3)ytck~rkgH5o{=S5vpx6f(~SAhi$3QUC54P%7q4H}T#hb8RT+ ztieDFC2qN@Nj?M@Ou`)jzF_^Uw+8{@)c6Bbth8KE*^P_kTD~chg(=L2T4DPzDV>bt zvq~j|G_w`4*JAFR?^qbAW%NJ4bvz4>lJ-9Llx$XI#x{R3D6bE{u)<{11sLxviCqX)i{(;#iR@itL5F$2 zn?x`;IA`zj5VO8ilA(BuP5q21Q8GW?RVxCfqUA51Du+sYNFZFI7w|d5MWey5I{5oS zjR-$hxFao>kYnnfFF{y-8;+U>5AYLI39V<1e+kYcMCh$#?}##rTwx&zrKx?=ij0dT zdl~=Qktyov4PoGeWqujpEsy#Zto@bPur<5V`s=q2oO{DMVes29m*GT?#u-6$8tWdpv_IrR90moD6oAhj9puk}m= z9EASmt>hJN{kj-R{?dyE&e7UA`OinS%&v7bflgDn!j3O@h0J{yIS@8$pL%-}~7xN^l)VnxF_j9#m?j=MV$0GvmXJpVA5udv1X`YW|8% z|1y!6vW5yBwbtVStDmMPqIVCpR_!3QUt;GO>f>?v$SBN79U>o4{58q=mB%A*{;U#3 z-DebzJbi0Sw9Ov?{4b$ioWM0%Qw~$MH}H$lu7x?G1rot z_lqiM{YdT$=@u#N@DlLzy?1)Ygd_fOmyf(VFK6&NMt0Uom9CJPmVg6B zxVDr}%@x3jy*`9z`QyHaSi7(d!BQUy-Lf!Pbud5R+ee4%tj88rpahGg3ui`an)49J z_g0XP;z3}%uc~4`t_uv`{(wcvD%Kfq?l^rQRWUr9FP5aDnBBvl)-94(k~v1|t}W3? zJ}Oo57{xcK`K}`UsOV1Zw5*TUNeCF#gX`}z8}?ZC%|Hb!Zr6~(Y+@SzM4fEl<4Hn= zDOeHn+7qPABdD5<+~fOuVf>1qYV{_^onk_ViN&$zJhzU>2Tlwo`(RefS&3^Wx&km6!MKdDP&z_8S1=mH&NU_ zj*L*fmjWrd8-AZxAR$2^uiOQEmSMX3^$fAQveF?56UZy+Uc059M5p1id>%HTV)>1x zMbV+Jis6c+zbrM0hRDeLNF$v1I@}eSHw^yTaqv)_CdKn1^fym5+1f@$P#oA1^b3g4 zHB_*$bd(t;Vp7AmcFgS!O=?Vb2gT|jaLIL}w>N4?TsJ=1$Fnz!vO#Wae?NS#QBLumnmzFH*(}0 zkc>j+zmQ5)LdO14L>btADi3VbzL^Es3Y5}Qr=5O--TL-n9kCO!^}rF_Naz%x-Q|&A zkJ1eD$J+xXc1bmxe|dR%`g;J8!)s=&*{`lRPWWzza^EmA!CkWYATxS~idg2U(F6p! zD@i~iTqM$&aD_`MiqD2>(#T<|l2)PF?1nZpkSVb?at*0oNOLP~o|aZ`O)^)drqJ3nM13BU`q}eJ_Sk=WG>TUb zhVU)A41(u+ny`jgXL+*kG~qCdJR>+>nF`}zj%wXLf5=X>k-4~EZd5Ms2bB{8uF#%8 z%8Dx3dwSel7xr4s0Ur1JFZe0DyLlf(h8jf;H*+v$y#i)`P4@Xt;p;Hs^_?)HEgGrd zgk?$rxb<|OfB;*n448r-+gMLR1|$462`CloR`?xBdg7E?mb*75Hd0M7 zD6mjH{l@E8T4}CqlEX{Mhev{~GNAqO;FodL(l*09BbQKId#iv82@w z83b3xr*r?!gA&zS48@PPfQV&sk{F{sv5*d|uyI#L{LkDDY%WNC1aQFCI@6Z}FQfCy zA>*?mN!LlZ%Oui8PP(m<9J{75@Z?Yr7Z{hp%<69xV3Wc|g#ErwE>PqePkP^r7jNwg z;2oPTjT6lZ>3K!90~;$IPrT}@2<`r7m_8Goh;#6J`;^K{;pT_uqSNPevT-~IPIaF? z;$3eH3$r-_*hmmP;&0qw7+Fy!;BmISa~+8x*2>R8M&9xi)6&meXg5<{33-hp0*9}^ zOacsS{B`-A&iP+6d?j!1z?v?G|-Ik`BPHy``V6)=OL4bwc}fxts? z#ueL*&c!e;k01R2 zj%n5iG~Sq6RKvv?Zo7Z;;TNtV^IzA(=NjyotTS2dJg4(TYTvVwT;l#BdeFlJvktf5 zA=#UyF9@NbA2OZc6eh|=!A#LK+bg$N%tlRO9hfg<-kgE-+T*NvM$<0L?6d*qHfsQ% z@TAUA-3%<`!&V0D;-|Itl}$CS9rWc`j@!s+TCROAW+5TX(EdFR`syw^vzz0n^~p#l ziU0VZgcKQFup?)DzlE{bYpoX&sz1U8Z2!T+{>lVt2R|`e3jTHq$LHhH2YJBX5=IM zf4YMxfg1xO3IAJ5q%)_vi>QRwc3&Xh7u{c`qH`2Zy_n(TSb86*jy|DDN@&~Fhfie`2CF-l&8(3 z=4lPv0V*@JY){(~Zg48NR-^0dQ}M@58BHJIq`~aDoutT-@aUsB8+6>BSoTITg-_Lh zJwiLOPw!CYk`4qMJGqluJLa~2ctcDY)&HJi45DPQ@;i&*Gc$mTar?9U(RsbE43f=} zg>~Nykc&eT_ary=>=Q0zU(j0ZLiAFN`o9c`I0^vxKfc>iyNTIJ%;Z_`?;b%WARKO+ zK^I}K!^t2opJ;Q|QPn6llg%l8oVMY#G2HQ_R5TUh3OhC=YaODmg3d-~o*R)kRmt1@ zT;-$q)ccJl7O7YVSZmCAy%R_w2neBCVfG zRx^c#`{bPV9S@0G{>ieGZn7QYhtwk>mFCCXaV1LJM@!kXm`y*197v1S-+QoX6bps< z&zTte}3>JVYd}c6gl{TfK{%&rc zY(=Cb%|*S~`%0YEV8;8WikQkgP(=U}{28P{S0P9%TdcljQx?7@MrwU;9Z3=mo2SLs z0NYf#Y&gAI$~DjA_zgluHEQZ@%IH=*eUkn_*(;N?$;|Z}Y-#y*+KtW6lA9-5q*ARL zuK>&5uuY#?eo{My%g+Al_pT&3T7y*z`!~zj9?&_P4wv-3$X9iG?d<6HUnL349ZF32 zZgRl_8myEl765HZBnNFc=$X?qxD11E*St`j?4sX0ZEXR=S0dbhc)!?@f}KKRq?p1m zqu468mZ9!h_)ujKy)Hl$FNIq^^pD!iw_uLagn5ByPYW%!jvRE#lY>C+FZ6};=##bm zhQxIA$Q$u4zMDxVj7F)be^!$aj%u}WWu*kq=6@FORRTx6CsWc~89tMFrozo6ly_tH zKH@o>d-$0vxiA(AAABN*R{=Bv2zhVzMoaFzMNh~ zqwxzIS;8x@a+j3oV%>6qwb~>M9tDNum5J_zj?!~HVjD1ugVG5@it{7Gg!ynX-3M-d zvNm<#962qVkk3DC-N)eO%$B)9&T?B3WtKIBKly3wEAr=sfdAEl%_>JT*-WGnQ4SdI zwTY2xX9Sn)TUrN^EGeEy?!IYfz}6DJEvJRW6M~PHD$hTw7>}%)*j9Kkyy{>F%*Oab zsgm2gRvRPu!AqweHNVbOCdZuuMW5;!Kv1l3XI(9FZRNN?;~{hMCf-CNjqZ22IUR-g zjfKn6As>H8XC#{%xpX{c&ot0eQhO(@!>6E1g(jh=?bDSqg@4vyca1OdcwXdbQoe5! zsp(yqorzWHOwZ0kWtNK6@D{PQn<|I=>6a@ysj{bS!aSSl7vF72&*Ouy=M z-VHCO95lL)ST~NyrY zFd2G5BP8C;!EhR6=sh=%@;akZsY~JV9rq7&O;hgIHjA1gD7UKzJH4vrQP#P4Og(Mq zIlY{Q{5zL^S!oai3@QLxYT2k`U#qK+Jty^y%IFuE{Q_Y}N%v_iGj(zcTu*ZFvy0*c zUq8bzHTSBFieFl}S1jVmEbL*V>5 z(DklWMRIXOnA2MZoALcz&9}>GDwVAh)HD6(+|WWJ$=ftOY1vu*PX34Zbb6617g!L9c>Ty=Qh~P{%b-HOh=KqdG)3bex&h zGz1^K3A*>o*3IKti8|H8p>(o%&uN+Vk}eYXRVqGe&^k|a1KwO);%G-Z?@3diz&DF~ z8$~u&C8A9FiLGp1GmvDFR@8I1E}R2z!W2wRprp|tW;1}_3dR2YfoKT&fe`ahhZxA) zMX`A{q#Pv_N=6Q#Pz^Hg3k`4N#R09#8g8Y<;6~^F;Xep7rY9k8CakvJgS67hhp7%R z2H@Efqxc@TkptuSc1ZmnL1%Q&dE2Ud&=EE$;b?ei_>12siZs=@s#8=i ztm;HHm}QuTwKbAzLg*Sz`1;9!C`XEIVT55zaL7Y>w#~!GvVVx+?lT^{{tft|oOt8U zPy$>F%#RqKK<&q5=wt9lqJQy2K3Dgh#tr(%IuFsE z+V8??4z%&=-i1-u?Et9-S*vj{_$5vc2)d~z@c*D6SU0-=ixcmx*#hmdNhycJBXoVs z5dY#YhFLA!n*s<-Bi#e+Bo@Z4&60q@iv zMavzKQvJObqEWt4A7DG2q3;zCH>wKMY?<;7*LzlKss;gMCp;XiP>mOKbm&(OjfNBM z5lR8r6QSOgAH4IT?n$=zj;+?rxXX(P67bn&2|JRIMZtk#UyIHKMagxb1EF~2&9dDt zr*9Zh@K7y|u4qf0!rl5vcf~9^;zLVXzu{h8TD+v-U%B->8BvCseu)Mu78hToFa79f zKd5pWZ3~})jCH5!ub`2**mzggwlgpI^b1D9ZWuQLA@9fCW>Lz_S|{BWw+C8I!H>p0XhU8W=-Q`fLZc*wH$oq(gNFNlU?|o3>taI$t4b<}< z;%eE}IB;wO7PWn<%kFp4L+_(P`#af`;h6&}Eo<|^;76vOW#$5M5MZ0G;Bsf+_uDxy zw~IbH>icH%@T|sw5cyNEmOY%?^6~+W&25V-v4n_Y)hjF(ji-DrxJ-$(^>y8pyKZ6R z;WGx1H0A~iQP+3`Z`lJ0ZkkI_J`id!_2#v9if;ib`wdf2uY4`c=*1#zX}m;WpQV)R zRU0c3lgO(h8am|ClC&*!Vp*XSJT9rarF0s`)w>Vm`|?hJKjx5g3iHEo)}_&z8&xck zjg>4Nkew)fdC;!(;GWZZuu_3AFo7C!q8!D7$a%@#30@ca7pF;;=cQ!UHGR~UL%-}P z%i-87Y*iy(=fuFZ6*`R9;M4llky7k}mb7y|i|EhGbh>|W%ltfC&4Uq`ahCi`gul(7EAU)IbUJ${G+8%ZTNA?2Ti{EI6${Z^=U((s8hi7`v{ z{ek=!U+?7Rf3HZ%+Y%U|U03Fqol(`XvY&ADo!cMhtm5% zg(dhh=Jt+yuFDpr#t$`RZ!1}8eL}TK3^KJKb&W{Y+YocT?Aky29$`ogheBgy#T}T^ zocc-F3)Xh5l^e~T1tU;6{ zB;sKR(4`qYF~=X}9zq`_!Teg&RQ{P(&u)2$_V$=$PscE^X3%S!Mgm{GG`f3C_&Gaj z+WMFfNjvK_>9G>y(}0kf{1k(9&7Pi6}0EzJT(vUnhUn`^iqR5Rb!cC9InI7Sfk|MOFkX3m37tNgvO58*d8tE;8^w)z z+p9WAS5&A{2qPKJu~ncc2gwcIfcrg)exy@<=kcz>JhBz~a?sASazii3E(92y9Gbw1 zZYqujvl)lJX6CW~;wFtyesUtK$2v>P^(0-}CW1C-(nQpxReVZFXqPCiph7F>{(~A{Z_vvOZxLjbJ@HD~is_EBEGw1t!3!r>Ma5-h zT~R`uV%#J+O58?-aN`(RK)lOsexWX%Wm2mmQrE`)1}1H6V>V$>)hiXPLKMbtib!>H zUNaXp$zT<$cFxDZGmYI&E2)jRza>E{Ij%qxlrhwKXRl}i!Ha}x=o4ec&?o5IpSW=I zB#Y3~e4v!o*tu7sor-69XQu|ac`iM=kqL2S&fw8FI>a>S-J!ecTPJwcn2Mad<2Ij@ zUtl5L|09saZYcJijx_lD8%8=_R&skr;R8lKOgrC#F`wpf39a;+hYFXzrGp)=AF+PU z5HZU#r!8J`;TvWnW)94XMKsbj5^nkX3S!LLa7AtI|5QIp?vs|l{KEiZY9ZpQZ?!u0 z*35zJD3idCDJsNP#rQ!bQPsXTjJM8#OSf_iqHAQLiBrIDlD-D+n0f+Dv7%CZ3XcTck)oN&JH0fv?cN z&>dvDAClt>?hjV+iFaYT`JY$1kDaDreg$U+VI0Qr8RuimVMPh0+|}36qjg_SKDe8# zrfmg^?u47$r+!w2lq4G)=T!Sruh8D**B6@QpP%4684S;*YawborBz(tiGBhgWm8l-ga!=1AxRE zMwr85UY)}G>YQM_XeznTDKnQqJrm=H#4$(y9o$0*#$(UI07oe`zBebny z+FN() z)h}ZF=m}z?=`3mMRxOX0pM+`LhX)|;1vG#&8d#{|&NEZ8))c*?932nKhn8Y>#9v%K zK?%+DMJ7zYr72-GuR@Hc=w2J@cCz9S%fInu=iMcPEtjhqm&j-(pWT=;3O(QePwgOY z(^1MmQRfJ$MO*uk=jqf17q{}snVcSTpf~Q4)w#?|oiNSspEnJE0OMTv?|^(G?pty> z>@V?n*5&<065Yk)9T=S;xVrprzca$>H=)e;oV$uYwi;Cgx0ZBRT%uVJdktJD@HybQ z@Fv0HLtB+c&^IQ&=}s=S*4<$p&6ld@LAk2)oCF+dEXKU^gXw6RlUy9A+yj&0oj|q8 z-&}ScEM-=9G{lUe1~fL>)xn^hWh5Co0o9bu?H-a8XMZDPH%=5`pT|G2*x%MhcHs;14W zw^bl+WiR_pxCZGa^PI&`|C~ttx7fhZIR>+zstl5t(b>S3ZC z=y0W!EsBI_jzpx9InPPyCE$*ciFqbZYfr?nk0@Eds>K{@G9{o?{Sf;4eSqxS!99di zA|-Y#-4Xuh285n*lCgb|4~r@M6&1cmq|gk~fz0y^-yla*2?y#(JpsM;&j5YHh;?;dAfN zEL`~nsRtx4)z@*xX~HGmhe~M#g8l4Si+}J=Ji#*?^NsL-Y-0$q1#Zz)67Di9+mqq- zABOS@LKHBU>*_Xnxpev!N`VC1NIp6aSxPT}3O{X?sDMT>fB=w(RJSw{&{hkVDq&PL zQ_{kx5F&V-Mei7r63=DV$|3wqzfB5&*)bo~l0rPO)gzhN(qrwm{%8`7%dX+u3X&Po z?{gwlaWJ(W9!DPcj|Z^e)3~!~%;>$#z!vAIuhWavh_`Q)D71~7eNIjY=~gb7pcP$B zK!i`U9SW&r-Q$1$A>u$gJb|s_ZfZpCEQ+4{j$wz>z->&-r(J`eQmOBJE8#)Mvlx{~ zanlf^8+ofkb)p`nKlTtz9+3TLYoSA_XAkYj+m5Ksbw=xS<cv#S=bCq6Wmz9?YbGd?9G846dW3r9;;ek^aDNbmNMZCYu`kCD&_o`Eo zaWAKrXN=;R5KI-!LS(|}VJ?#XgU0xoS*q)Z6p!IBekWG`AHR_K+qX>A!&$~F?95tE zzyKO8?JL`H1U31GO?R|dOOp81I#kQ>Lmch_AeD)cgx*NA`@&o@>7h_N1wW_Dn+m(m zY%3int19qKSZ=^mQVqV)6`PX zgLFN&i`Iyb<>OIbdT$wc_k$^mY{LV-O$W)7KkqV%B&m}sPWB}@Ue9&oVaYcC+gFwn z@O!Z@eUz1AzYXL8TZFj0;o%dB-;+qOGNV05x8Z-w%oAkgSpZK>edT0&`H4`p$Xfg0 zS{Hkw4=v2WcEnT$ddk3=Wsb!|CJx9RA>m}1QV>#v_^L>QmX&QY-r+wS+!D%-(Nk=C zCrs*4B`o)8S6}w}lbvpPyIJro#+|#vgkNK4QvgYi3*#yD{^UXQaRCoH?hmA@kXHnD zTLUPLvc&gM2~3+u{k}8KTCxY@?8p`K7UHbE+sL{l<$x4~KWP~41F<9#0fu^X3qSY1 zcVv~8BJs>lH&?7$4#|Rth(=%!A}HnOX9Ji1Z-IFX7mDVU8ZP2#?>v%C-Vxo?kcaF( zFpjnjWmcQ8XkzU&*)cPzWf5ro_QsI=_onq%LpO@ywJhmh^D2J!E*btl-H)lWnpZ?; z0eHZ~2nd5PEX=xSNRKXR}?n{$5#ZbP5r(NUWG z1`{$02@8IR-Ey^EHdo`W*HcqtS3&Wo_$f(;H)w^M4B6>DW!0+|Mng@d&nQIvn~Vu& zs~M*1DL4owyl{A_l(|`4)v*pczpD14Zq@K$4pvw#e2z#Gb^=SMDfK)%CRB`0GoYUu zK_&5gPG4m}A48Vzr&e6fqD68RW@-EgM8UhK&tj1?sox((BY^$-5HIq|%&9HltFZR!ie&IvMp zV?`j|a7mmuO-jp+q^RViGg5T$cRAmR1n3j6oSC%4-h|Rspf!Aof9pR95Qtn#z?D~M zel3)-x;Tt~KmC``U~Y|1%j zrxA2Q^8}M9=z}3zfq1zFulcKun>p_ra)NmBj`$y$wg>Odbm;8Ovapwmmx&5>b7^Sx zFgWlSS?ODQeo}t&SjNhB@PGcBvEoNsWdd?MHo%wKDXnzPR?U)no@_2CPZFCoL{1hQv(sijh-8lZ{?gtpHcpa@-d8S~wk}U&ZD>uV zuZcld=Jh@#q;JX-BiJ8eVfx+s2R$V_On3@ zxW6CtE+vJtunOi&u;xlr!}duVE``#37cu1G@5SQXUe5(^FY1Ff4^$I=dVcJHEgp;b zqAIB}6Vhoh8Ptf|WZ$j79dIuY{;V63mi<~>mm?Y$uf(LI6Do<6^}pl(^R=6uU?oGV zQx}ZS<@eHAv4$@in(m_eE7dxJYo;Q|f()hhp;jj9J+UmD1~)zAQVc_*Y4}nb+-ih+ zST|`pe#?Z9f>BypKF~0V9#$g@t*Wu>*Ox)Sr)0vT?oc#J3BrmDihrD_p8Zrd*tgWE zieiIuhX*4@g#$UCi8GKV9%K0rz-&o|mtQi$Nl?TuwWh+NyQCz@Xd8ggLLvv@p7$o( z9xqYyx-RPY_qNhAYgmd_jbO7Qk=xd3&RF6r$QQ)qVJi6j7+ zCAJQ>hLt*hjy}B;a+#P8;PZqk{I}0gVtI$1Rj^myG}f&xDvQzmTJC9 z_5b7TJ%gHh!nW~1LMNew1V{*>L#P2lFQJpr0)*asC)ChEDN0p9M3f>3q7)HOs#F_- zg{A_63P@F&sEDAzUuS+iAD%D&nfIM}Kb*N{?%lJqb9VRMcHP%8j9-QD1~wY}jWw6z zyWXR6MMzF!D2_80dbEe}c3h2+Ege>UNyp<5dH9WCq5nc)IQ=1%sGxxS5GabnebF}U zjQSu*nmRDi*uco>78~2rbahH6zkTkjLJ+oAjnsGFWu4UuV8klW><{3I^^KtrlD#9| zhQ|r`B-z5p4{zQabxux{m}>y)vqpXbe-=}JYO5*S$wIbvKIa3pBLPhWQmpu^mK15v z3@hKu{LQKfG6sGJ?Z!id#p%ZOJv7yS(T3b84G_5ZDp$nn0-d(DZwU(wd@too$c*WA zyH0vrUS7s_brlbfG!i(&f#3C(L$J)KB6A4zTqsp{_J)0|QdH>bEx45xU@N7Yeocva z_&3f!2ORe$^D`t}$%_RY)FBzP-VIDThwc^6SUk&W&=(pLJRE=}m zN%85^VK%+Ptcy;TOJqFbdz6ImylQ@Ln#klV<($IR1oh{7X=H=B4K_-gBg83V)*OEp zrLjvF8ECA$e*-tXykJTjNza(8`4Jf=SB-ih@5LyUrxU~e=UHMv2Pdp1E{pu6KO9h? z%o+zzmiOwS33E6z^oAf@bvclaZa8Ih-3#~~sJ#_ptqhYi9P>|#I*Ou6% z6=d?eWG)7ayX_GYb3{Mb18I~W!-k(V;3Wp=Jrw%OJUH>AY_3OXNgJ$iVS?!AaMo-| zRZGxWmyU)Myh)YLDv*CbO{HHtazwrg$H`w}Dgp9N9Eps=SRtG_(o2D zkA=9#sY>6+&uLeh2Zk{p`O`-6`N?vpnA`KT+%ZqJYi2!Q`XXl8BkXXtGc)nsO-WPb zOY4$wx9otN6sWh-!f!bCbT+={jK2MVkPu*wgVP#> z4Pz*?bB@ZIbC)}g>TrYpq(Mh8+=z>oKr&qTDn!1Q?C(a$V-vm^-C&`YnBy2{IU*8D zNEbX@4OT-QnE(wvWHj1U#v<&~XmBwCO_7WgFO(9v!DureMSLKtop6r}tN@<5jQGap zp704H2#>$WBg&Do8U9oBJX8%ThB5f>yt0<{3dx8ADgups5>;f&f}dmSV&L3rRV`(a z^-iQuF?CU)aqUzPjSMHe=E!2Er#S5uGkl%VaxoIR<2i-6EPYaq63RW8CSER?=)giR~5@arMnE!))t1 zoQ;zM0>O>OX|e2tdOZAufB^Fo7=_H8y^78Nhq_OIg&q@Xxj>iD)wkDZ@a+e*&%@lf zk~i1!f#v)v?-go5o<((XcM<_1q;50BQQ`}!ruBhjUH@lnZ3R-aSMO7FZuEXMXGpb# zr)4YpZa{{E)Aa9|-%!$(PSvteP789d=VB;hd_B!fdaELrwBGa;dZU>VURfC&o7py| zWxpY2VfX!kaLfH9;IMR^cam4MolBiA&&Z}a!vwhi(D|bQIBX*oYQ*N}(wntH4=lQC zgCEk@gDyP+b?qo54bX~&6<&YgO=qL3x>}NG!HT%b&=Hn3eTRv z+YDAE{X@Nl&Npm{fxDPu0|+jk4?u!UT?tBmmhV`*R>u}9ZBT;%YpXxpT@oa1D7x%uUcW>AELWOEG61Z5T=qcha$2EcE)5GT0} zeLjCpe!a{N7}Z{6I3ej0Ieyp*tA;)|nc7(9cAGY%l5Rq1D~*_l^?n*Mqq9l!@VDI> zeBTFQ>^-8g!I^N?1f%zi2hBKP2p}QErYZtO*sDq`=(UWK?DUSV+dw!};y}=J@i<+l=mj-l=Tj3(G;)rHN6U0!$^JZ0vSc{+d zi(iGzU%!Tj##aXh{zxMTS3Dn%irBF7iZT47!;pNWrbJtyE0im)Fym*5SVfeJU3BA; zS+L+2=Q>PQWE#E|!U8!~+56}~C#H2E?$PGS`c66xejLJO*5P31*?OVWX=|gwBH2XW zo?`(V$`ZJ*RahBnopM`Dpt3X4(bKb6dgIv@>FT|B&$OqKN#7cOGJZ<9Dd+o8&n=AC z&wZsm6YgWG17V`Lxo5Sq2`Zl{!y59gaE2&!bAU>OS;K!lH7+CZ+Ayi57=Hv&Su4?o5v zTEM~`1-dw?+aIwKz0VaYX7y#58-?r*uP#YLZ^0z{i&u!d_MFsB?hz&VEk=uuK3xi( znQL4Ru0qMt<&fde6KAb}=RUAngamfxWvP$J%L3L6eJ1#O({H3JwzT52L1w`-BgJlc z$CcVVoas`VJZI_o%=S}aCAotYGMQ;s0_$TQ#kP5W(m9ZSzf>GG3T1ISO76seGZC|F z^RZ{Ut#MXI%!d+DOab6scN?&^=wcHCGNwE~fQ zZ7Kta*Gm+U8ng~O;!$?&y>9b-#ldu9Dn4lC`wvuy%cNs&H4g#K`jTd6OO63F7N~*F zN%RV)#zo@juN$FE0|}*U5&^;5y=E1Kuk~{;eS)dNRcP!b2qqH`XUI3W$`iFmN>Sx~ zQa07T#nZomE(+%T#(fCNi{knC}Vp* zl7odN_F{B(Yee!7X;h$@QHz2FhUfy%2ud&-&eW^!c+2xdn2~-_KbQH5Z;smz;xPCavgK!0Pizlb%Xn?r3`8F%7k(D)wf`U{Up;NZ$6R!F(U4PvrdZZ8&j41 z@;ybmfHLU$oOkMLR>qzj*DDacxs_HlKyt8tx~CuP^G1;Cn6MsaGAg1@%a!%(wt!o9 z&r`$VSB28hCU($TnnwHw3plIg+`J-SZ<76RxK`e6V31d#V1}Fj>U_X1A3q-#%`ijV z&|QsBj3d&BZ$?02&Rc5oS9iQ9!f^z|@@tC~Ggle8+J-po&eysfpF%|WU-l~FLnqsb_@KNv>aIT#JJJ z)hBGbx~#=Rg_M%@>jF6nomn~Pksw2gu$Z>SY9M2*kQ?TKQ*&6SxT!5yTBv4~+H=O< z$Q8{qtMycnH;c?9GkXN+Tm@5_lZj3Sm$vCa$b@d8xsHlfy0xfCN(%S`2aREHix7ch>rW$ovELP75trc`t< z^1|A}7out_IH}S8;W{JjR~075oAG7>n!;mVouR3L_IjthBAvQe_fd{gDL?F2rTd>M z{0m(iVlSGOGsE!rBg%d;Yax#`a7T^?cVDS!zw@@qQsVmqvlv)zb4t{=gsG3pqi?`8OdU|;#b z>o;l6r9afa)wQWG@nzn-4s#zFdf4RR93+)+TF)(>3Q=witZ9G$uxg3^EzwDf8Z4S=k)jid7oBC}Er-}Lo>`-y>F^!qPpW5|l z+&HUtJ&l=gTER&4d8^a-OOLD=m*Oh8&ZAO)i>ap*h}e@#4oj^Dk2;thEn2!(|7b)3 z$9LIRAtrjoQVyKy@vcH&arlxXqpNuz?bHJ)N~`bJ$oNMKzCF9u9P9O{F#7G^a>q4u ziLJuSRsmTVigg3GwZHNnl93r8$?02T?haR)K(AY#L-MzV^_I6r$*1**RlMRSOfX3y zIz5Fx*0S+L3o%dzPQqz+w^eaji3avKx?1>>PGq{X6Z_1Prs1cV1*ugKLrR=0aM zXX&)mQ6Hr?8bZF)_b0&wtAhOSv#}kC~9|a-ya>$wIXo6UJxe zlC;UAmm-#pmS}Pq_$2@LxKq=-Y`~`!f{;k1vB(40>d^JCk~Us37$jWuQlkBs<#ODy zD#C2^1bf%HhI`gKNOy!TO#G|nIz4v`+|*kIhdUj2|F`A*pN_lfJ3kWX1?E{FXP+|# zGEkCF>vO70qZpdxH8f-{Ikn+9EbWly?|W8M>*M3Yn$ml;XAD!>QXB)FH<^5##L%NjaW)XA zUBfwF7#DqvQ7r~Dp2172;eBY-+}h&5Tk065_A|%p%kh|U?^r?5Rkatk8(%)g_>96t zs?z372?qVKnvsl-U-;0p6;iXBj+g}Z>-SmkT`jM}5)M=C*$-sB-EveIgLY;~spXl3 z%iI&u`}jWTOw4oE^G%VmYAc@k#~*W zlSo6vyE-pEv!!9c+l$O`o6m^Okb?09cm@xhSz3*|)zl~;@-a2EHC@T(RfU6mn=*s; z{aUb3_bn_Bf+-t9Yqh0Y(}1yPwtMZKt8GWeInJ5{=lT?zuhZz!CkwFiezd{*n#VEZ z8(JvBNIjiCAvsDp*=>*2m3RTT_O>R`Bb$}?G89YdU^YPbQZzYq=4-dOnALe3VXA=+3WL zQd6iFg76~R<{nz<9r}cei~5jFp+f~qr#8r7HvK};dh=%Zpn-FI8@sVk$m8cKh0$&p zV#%WMA9^Xkv)j@R=_=5K!u3xC{;$_!-(2Q$)avp?^VrX-l$DOs?*{#mN7D}hNRvmZ zDSein^UKX~U8AocHvjFLPy5yX)(sAu!mE19g|dr3+Sbq-!^^PNBeBMGA9PRkZ|tB@8QXrtq;fc{gAO#9<);+rcN@+cDl)Qaq2|(nMj*|J!g+8 zxB@VfPkHIV6J$n4n~Hb?AH)fso#l0Z=Pr$L3()ZdZ<1WwQy)5ukEUR6s0DCsd4qWq z$2*;sm(Qs>y>ua53%?IF>> zU60>F_>qM(OP>Fm<3Nd$884@)9UF8_j-PFqXdJ8NV74BUb6MQmy*qN%1^vDhsc}B} zwXisu=hou&12B#)Lt}){)gB48wQQTRa8Dg0!JocdLTnMmskf=yw+ezoA~4y_p( zM9$ErO#VXu!~KTqDua9@w&Cdpq<{F?`HSB_^uiUS{KHvRW$u4SUYV2qhcEk5jsBtG z6>+zJm?iGyf7(_ZoKbp}FkaEs&_(G1(t%+T;DL0V4;wt=g*V^A?Ivz29}u0Y+b;$E zuMHwNh=MHw!I%y$4-@^8P2MKYI+V(J8XGQ`F!$RnFF?aThEdKN_mp%a+$^P~1Jsu; zUxGily~6*llF_hVDvY;K?l81fbc6lu1qIdEr`(R;*f{n0N3CJ?iI$S>By%uRaJ zO;Et?5m!*FxOcFaSF{7YfU7`E4;%V%8$7wSjNGimhdQ{xIe7cZc$`tt@m^Mt4WSxKVt zVwIED%fWr4QkWdBuuIteHZym;AL}hIXCjWdAbf?QBB&PbKA&b7T&_-On|vS|O;Lz` z0dtS?dUKV=dY@PMD!`ekXj;+bt#JxdX3AaX@r*RH?uUXg%hSs~aJJ?6l$8zfRfI`E z{L@(CN`JZsNkqY}97dJ%iD8BpIlNR`1lg%wd$s_YKrO^OyhG5`n9l2JyIOnU4_-zW z{o!P}`<>_r>T}a^+bjiX#Yf7$Y15Y#$e96sQoy=r#_4)}rOxx7`o>eO?i+q6*jvjF zYCm-t1AJK1o!7V1Jekxtc^J0M)gMF+YN*G@xq>xplny_}Dl#Y@F!^TT_)gbx|GMmH zKhMnj#OmL-%v`Jq)q}8=m~MaZp!sKGby79%Ci{jrX}`7P2^;o1^|^nj8fIdw`g}_~ zT&&+lCV4+U2=?2!ldF8HfzyI=_EbGvA!4E88y##F1^)MJVyGz>QFDx^{*)&(HS~A) z1tE)jAE<$U#KZzb3;a?E2HyT*YlJ^PKUtazq}x1`g-G)TdZ8@ZLTqyz83EaI4X&IH zEvgG><_PS6V=fe+N&3R_jAS4UW5yN~IipzxF!;uHQ)BN8qU)Lh|6__QT+ib>RoIt< z>q*LnVf;s4o8BlM^kOxu#Y*;qN5?oT=Vjd~_(G5lbT@$54K=&pW~9aNISt zW2E1ZNZFqu$^I4rA$`R`#@|<`I2*8bQWe$SVwwZEkXrGbz}(n=j54WSe9WjIx*@M2 zT<_MKkqdCMpfCFve*B%n(EN`t{OG79+Kj zAK!A<>2!`x7XfK8bJz&`xNy2>7;=jPaRFQ>Pwv_KcI@J~g(>!7GyWz%@Wzbg9tXG?V^8@tju9K?dJBVzM3YdxQg+b9n_m^iz&({Zq%5i>8Eje>nn>R zlC1FP^(9pG8*havaWXU9YiFKc#J z8g+o9iF{0xx>(PKG@obYRM>+fGt+N8J;{1B)9A*MdhYk6a}4;~C{+WO57eTy+pfs( zzHy5&RiUhaTGntive+FDg5{Kdf?)LYMGlzDw#=!oK!IP$oX&CQ0@ZZNF2=^{V`YPp zpf7a6A@lm*W-j`=ujzA(2(k+L>2kZf=nw^$VlrVskO4ou=~MXl;R6%D&Kf<9=yH+6 zq)yqHu@dGX_jsOsF$(h-rT|*B+~{OgI;0vdz#{?{iZyD}NRPKtN+g21k$UWeZ$1>4 z9GZu3KQX5d`-}c4Wt51C^itaLBBUHST(kJt45R6mHWDvR2@^dddm`X1QQ&!EpNmxO zx^0@5J{A)&v}pu3b@MYWfsihfgEa0A*m&+#yx=AH%2Me&->6S8>VUefM6`2xVfMO+ z#b_4ld1JARn+8H*y|nL#e$)NtoTcw`BN$i<-w-+PQxb^LaaW4bk>Cr4bvaqZCv!+K z`B-YcdKcnxvl68~&TBjY+>R}%_{b^yNsnQFU(e^m#zPr4J6(Y|x*YU#mTA_9cNGkD z!C{_@jgp~nfD!7FA71HKH%Y|rc1@@JD30?g&A}OJGMUoJ#on-2kUStJCUtoqUgL`u z7iY2SI6ksHd{~BJT)N}{i)=wHKdW`uN?P-9S8HUyKqso$>{YI{)Y8m&Awi6N`_p=$ z^bLydJE0`UE(9F=;VF(Zbc>?n*SN!boh<49ptUrr>C9uTs?0%C4}E5Ji_t%n$h)Jm zC=sfzTQFW`ZNWH#(jNwCB3TE|93bJYbe^IDf(t=B!L8PpqRxc-oMR@*w;L)1sJw-^ z@6{6bIhusu(=RzT+5rU%0gVoKnfj$~O7yr(&8$(Bvs;VWqPi2 zRA%}*rny#EX^W1Zsvowe_-ZcJ#2YIS#ZTAGl@D$p_SG&Yje4b7m2fd4AIk{na9;o` z6pA99C@Hdvr~19pZ|~Cd^Kd8G-}eUEa2M()&T}a3VI+bXHBB@+6Ov+XCy2O|c!cqy zF}s2VkJQEQ5AO3o-(%2SGPkkh!51>VQBuNa#f|uRamP4g7|^m;*AP3*37141jyn-d z+##p)o#wMz$+ePc8D{OrL05ehb^ekYtuEvNl(KX^q8BUf0_+@V1N9BCYKR+o;@*&6 z982U&@Q}$}`-ss#>6kV<=;`-ZIWrMvQx`>pxizZDH+?f{gGGeQzrLkoIm4c0GIbUc zbC}C~le^#W&qX!C%>Y99>3hb%E8LN&^_Uf@0)g42PqwRrHK-}K2s0;6L%*W^VF&xk z1FqzUej*L7fd;lJcg0WROUcX`W~2dSpZN@w*77SAOChoao3sH$;{7T1ar*5QQ^rQed<#D)8>|dNFhN&h z6UQe3)HZb?!dL*Uw4J6|`}>2yuZtPZ+hzuG6(J}52HJViKL=FU!1^2(9B5%_2K~PQ zvd^jEUbh8;Q?8{G{cDbJYD9r@E`Mz>C#up%+gcJIBV&xnldPxtC+Us;%Fu ziht{RY$@LTjjkp3vaEiba0+_e$tL=j7;1&1io^cGrpJA>0^8PSORv*@9o|CXx?SJ{ z3ZS>5H^{Qq&!Mkp_Zs^ZZ-czYl|P-rbn2&1_Q-BG%C%FpZ(EAEBA3-Y%G;sECHU~f zH*{KFTuf{?eeC(%^4wUUC`PkT#FFbDb_-1;t`H!Z-|cC>G-c5c>5aDf*er1?SBj9a znv$YoFq^ z17#hUdLz{SX4n~UtB`eM;4x-(KA0naqcPE%qKvxN;jCw2E*uFG9}+sq(+H+XxWgEo z@51L{tE-BSGvinOv>=?mVI-G-hp50eM0TGxsmIFoCG%xmSaE78ZLI|YbWf^;DCE&6?U zcqF^#%;xzK1oz75pk~E9%9V$r2^iKE{4bv?nwP#inXgex0ubASp;;Ewl3s;NJ{ad- z)Y11`Y+o#6@Os#^A`?R0ZaDu1Q*yB~_QTz$8sqKy9PnrZq}p9d-1gmFYY)gDX9h1h?a#t>Mc+92+@Wu=RM*vaQ&^3z3wBGxCG-cCSi|nqe zu{W(mogdj5BMZWBdsDdT)LSnqeXo|ME^5$4ps&}PomX{HMIcgYJ;WW1?!YIi)o z=AtF7gG1f6-~re*$N&G?hbZ%=HtmKul$oCK`<)EI)BM3jGuAF&=mmvE^jW1YBmYO2 z3-yQ3$n?^3V5W0K{CmJ#%hUX$R}_Rc?sxIe5}1_p-_M$z+N+tCX$@FRWMW34^bFU( z{g3Wqz#k5a?BAi*QOCxp&7D2A)BM!82M*NEVr73skMQAVmj5ZgbF)i<;D0?y!wxB? z<}ev_nxCPq+BtxHNauQ0S6pV~BW7#S&4pAZ8D6V{pL6|8bSr5RbEp4x<>;2IEC#VfT5vdJ0s}jop!~ zyw)u-4|y&C{tl6(|1)frn-OgDVC$vqZFv>-JGaWEKE*x-Xw^g$jQcnVydBi&SCdB} zDKozy5-SRV??u8rq0I@d-uB)uWyS`g2@ir$?ZTGmjSt15d_ST*giGG|3bW3c=O3Lj zk!jTQwUO!-@MF2keA%iEE`NO%w`Y6V>x!$V@Tz>HoY`4EvsVk)7zHOrUb%=TF0^g; zxHSwfQCE9wR6*Q{BG+v-ET3<2svvr>gja}mwo88(wny^zj_H?ws>HZ7y8D_P@t0Wz zu}n&t_!V+hMbFpDB>Sqn;c3SM*lE_}Su?6S7>7YJ23~Db4E4$ldMnd4mIc@mZ=2s9 zJ_#3zdiz#)97C4`5w9jN_?dV;F*@>v7D$Ln?&qtrJZ|KuaRxlgkJMBK+mNadxA$U1w1unwCn+s{Q`p_se91ex3qq%6#u zg`_EzT>tAj>U}sT|6s&(@7u#=NuX3h)WzgpHe-+Lw5R@o?x`i{!KHm(*o~%;BJVA| zQ#)Y0)f#v))K&bdJzzp*Skqo>15CBg@Dcwtz=n<&_eXb1TWeBAXaEi0B`)+@fc})8 z2RRznSzIjUfHC(t8^Dn7t$OjdiLqR%UN)MQK1bQHLSb}dXJz>Xe|e$5u_kf+aN0!( z#(!lj<(gh($nQSAk;Q=R{*AB7^E-)%l4JLZ@~?nV%c@lhD_cDHR>^J!SP#BRAS* ztWuj4&WEzd+s60N`ZQUxpZw(zhxNn+<)#nQ{SL*6{|X?Qjy<0hfGc3a2?vs#Hy5jH z?v~N=e<1|OzuPgVU}$P%IXiYa-S3)`Jd&n7H{IqEklEJKHBUa--}qSpo{QO{=`!w% z1RRRSsJ$TZZmHeW%k2J)4w*m1;-35a48f>Lk2`U$+w&Xb4}g9KrH{Gj#$Yn|=dxM+ zO6YSGfsVrpZ(a{tJvt6o z=BQC~o#nx9r)JBjm#8R%_M$|hOD0r|<+b2P8%*qLSJwzx^_#AZALade-yRaDLO2wQ zDbv*Lm-z7cz(anKb_l3`f+hJ>mzD^}dNc`xz&xgYoLtsa2U^)HVafN_Y_(;SA^-um z9k&Z@{fN+*Kskw6%%{){@w;+Dk|!OIL!x*Dco;j7SD*= zQ(sWyl8EY7sZ(mE*|8Ag&)F~)aHFZIZ=$Mx=|Ke2!C2k~J;F(m(xSEh%ctjZEK9?& zEPYqnFf`E!d@u(%Z(XBOHB*hbJ_Iy6pV_0xws-@k=S3B2$S;wtJJ%U}DUCb!XQsQ{ z`*a=}R?BVS^dSf9e(is`I zIiAS!>^MDk^N7|hPHdiHST$_({Y^HHqGu@U$B|-1xLufH;Zyd6taSw!+r^*IfX*L6 z3kLkSjbHnCPUNiEL?V~J*^3>lfq7$~=k`%3Jo&RSTSpE)U_-d4703aeYZ0tv0KpQRewNSPt6MNq=$l5=h;E_G=qoW)scs4 zDj98&ebCziW#55`OBqp-B|CGrz}YE*sBJk-P4P{6mTNYcl-?YOzT#X@+(9 zfL~>ceZ_@KdD~r%{_Z)huQNgy81G@PqrH^!s=UKC74qZ*%BQJea1QLE2_tx)yDgaE zO|5h({gU_No+Pf^%Znx<-_J)9aX0muQ)msB0c3qlBLMn+yaMvO^1v6hx}qbKDX;HG z-BuVJWC?Ro8CTPdXLK99l4X14TC%)w?;V@hddmTK1roUaa_vQ1FR3A9;D~rG-&FUd ztJxy>&TnB$e_*9_&zXAYku_mxlt(O|HqxDi^n&+9h*J((8T;A+m zx3@`Izbozhw2BgCwgzJQ(PL$*?PQyhd3J(j z>$ri`tyd(WC@o|6nR`yqn$J7AK`SCKkQrhiLwB87HOEzN*+N6>wZWzo?7ozoM9`8F zB2`hyzWE#VUfoBpZ}@7Gf7m&GothS9UpZxx+$F)F7nH9m%D@g1m%qH1TywT+wX&pG zzu-z}805U4A4CcKifre)ZivKb_RzArHf-t;0;_G}Jp>^e2XMHK{};_$4LJe9x#yfd zvdsZ7!MP5c-*O8?jOk zxo<^y?*G+3j9EpYx9y2gv0k#m>bXSPQ6kt)OyF1&F+S&vPjQd?o=PQnf1l-B6#M1~ zi>{C~&g)Pc^!uhz8aHgu=st{6EDMax8&z<>jEuKIAv~Dmr$KJmT61`&(J`AoeI4sT zl?b*#a>$_c;cdXU@G$P%oorvWs5RlB@)Bzv0q=!^Lic@`TDR;KBwz`U z|Jwb&iZ58Dg1ZthzJuz!SEmYagR~UUS3U-)EK>Zca<|AllgUs;aL&X6O+2@Xu@N zvN5MV6@@yruxL(2hV(8cLh8rX$tOPxWf4}(+}DK7Ls1$Vi6BnKz~3&`+8{NKF!wZMwD-k^N}SyFN%tTX7F-2y>KQVA#?yyn#+#1@HF z{aZQb`*z{h0Wopf*?(?oW&^?g9S8(p)_8E3QJRE<$Is7zR4)U|UIo)|K^_;7-(>t@A zuJUlV3U2-fy9?-%uqEDx&LV7Op_A}J(;M5CP(EbU96SA37C&Y65TzTK?au=3RgjMq zHVVlQ*r6}vqvLte8Ouw1zs1|GI@Cvs*Vrsm{Cw~wL%cLV!wqAhQ5&Is&k+dSIr36R z_d4-7y^c3Mx~4}Wt?}PWuMyjpPjP^#{YfY_xG!$P%Ib5u#Xs1{B9*l2xI|O-@U zX7C#;77i6&74s813KvbQBcbC=Mbr}gma@XnlK_={J}VdGKtwb{wX^$rqFLmEg;{#8 zJy!%t)?97?<3f&;O;tJ* zURxU2r|}v@k&Wn?GFdV_Ty#G#$VhQS zNCGwAdE#1Vq%DrX9sQ5~`2A}cAu#MmU*<}kICddf3^f=57I$ow^Dsz8W4-XMq1pYg zYe|0y1>i3pdCv;%?Y57op|wH8{f;Id8|r5Zba@op9i6Ybe=Kg1>wQ0hYi3!PzI+R@ zwL@We@26|is&|svusS0KXU-jg&gQ)EmE@TOY_izGaormh7v^&4oss751ldfIM}C3_yEQ-dam+BH1E; zwQ0Ke%eA77LhU}|!qqAw+!-hNhL$Rgt6WEfmc~P9u$wU==ZBPF@PcUFs8r`zk8wSX z1UHhBYHovAxL}=0z2mT{G4DMqHxyYp>B2(dDuk-N7K#tE`WR$o0w|>2;=1Thm#ivX z6CLL1CJWRcx^EcaDyDV(NfK;vn)h@NNtaEg%cpsM2BiZYo0V~ti0Bo9->s^_-yk}&bT4Pd#jXZzg z4LXCHzZjyfz5h;{&{IV$-W7~rS1uIM-o62Q)@u<}dEXT7o6Dpl``eBt>gIU?hM-_W z?B+eLywA(f=9mQvkG_+=5|J5Y{P94)^q9h<$s*qw-|zG3C0+OhMxfA}Q*qX!}d zWsA?r$Z%+Tt5%qJx=h}1F#fHr{Id6>fwbtZQ2lLfBdI#b49K^ZRLHt2iEULgXQ%u2>kssU$4;W+k6@pJ}QC9jz#1f zd0FOO%{6_->OXck93)2UyAyQQ#nvnqaM4X~&lFKA9AvaZ9*2#V()ryfy&@HUEjtmV zqaq6_%CcA0FAy#7Er?9i33lLiY6gR;sYWNJv`BFzt^L6vd#JSYmn1y{JH!i`Bm1}v%fMKEF!@%C^Vfc}peXAj>4zT~iRX8AnfTjUTR(q! z-=?5`9z8W$wZAXd$E6n06JeCsOy4~oagKDnG&#H9 zDcgHzfKupjUAy|sB=HV5f&p=M$T^T+Ic!EG!Q!RbmOmQ=s(4(JJc32?f_YHICU{P0*(Z>a>qZQXqwO6|JKERc3rNJ#y;hM4tN&E`g` z%K?!?2>t;9h@x_cDY!p_pIbrLmgstJTk`&+8C2MeWb)moEV>F}7Lu2$cp&dU10t2K zUj9duD;&c^FvMTcHmY!YaB{VMMCUgC{ir(F@h9mjKxAUfKo zE?ge(x@ZmLa{vy&F}du+ayEq*EO6a0D=$CO22a<4vB=QQd+_DA}!&qWt=&6Zj3SRMMqb$2})4 zUX<2+z_qu>ln{5#u)NeBZ5fKFE=GIBcUQZ`YOndPR*8$c)LJYp2WKSGyOw)jjrTY} zf)_j;id3BDR+rKf4Qro37wX-jTN~SmW|Aol>iBfVR7;+QEaZ3Ag5)Kuf=cTu#`<@6hZW7@33vsZIt z=s#9TSV`P*ZvPH2jhR{pI=+n-B(*sh!JXy#GFRXzREWCQs6H$q(4Yh_Pj!wA%sPy^ zHmxbAaQIu?)oMedl;*7_+2NyGEqx7e_luB#i%T_;v6i+stm_dguBeLG+ zZt=gpW7<01I>30fca`dTmJ63+tKR2m`YF3QL6(p7>*u4fbpOqFGonJuqxDF=Ta9HV z8jWt!_a7I-#Jh`>svw5Jpt0*dAf;lxq5cU$IINKVd$6m_K^@X=$Bn}4yKbbu^!UCk z)lY&Zpq7r1r~5LbiHDk40@b(h`P9bEPW|YbChHI07C)rZSP@1}IuhbO)ZY+1(0ocQ zZ2K$}U@HiUI6e`1q@0y_#zrqr1(A-TV>oXcGHPpKg+uWS%^T}Lj4g6w;G*weC0qKr^h%h}yl4m%K{EY7eG zv;;&5ha+NMvWpX}OxqP*6B>LRG?b5_;sU11_N8L;O1LCGyNX~jN>~yvyg2y1KJdTq zS%|6%E6LXmc>^P`^xZ!XEZ7gFlaHGqr{`No^!Zuo2mI9)YaO>CqdB3&n~^d9+(O zzfprxQBIhY7wr5A#MmasC7~)9sbtrv>RMskOG&cf-z0j^hFFy(!p#sqJj5O9=A=DjcE?CCzHoDTr;fK0yA_BfqyPRC1T{hW7Yd8gEZOFu1A-7!%DN2VOggejk< zv-!#s)&i864FZ0IP5uqKhf3>9A3Qn(KRv$+j@e{qUU{G*EOY?9cy&djh6inkR%w>| zXFq-Zr5`{hm3+?i8$t3}>~fmQbWYPw%Xu!{VQYQ^?=y2vN9gJA2E=QP07a7}oN*er z0!Q7`pD8fWK0woTW|0hEw{Y3H+DO*dQLC4{@yJ;v1XNbvF3yGF(IWmJJ+lN z&S*2;S@+QfeMJbFm`r-m9{XwWTx{jC_zCu6<2m3@-n&T;ar@16%5#2$?)S*3GxmKv zwL$Abmw;HZ)$&0kUN+6$`5nM-_!BCgKI`y?iRzGAz~&&!-C#dgVPKynGH<8U7;pDU zp3AQLdM6lzc?4Ya1`W~;RIGcrI9y@9!QG0Pk|=%gv7q>o;MW*GlNr*wI} zf0*<9qvk&x@3N*lZL2RjBS}gY`s^u*y!e_`LEV#05{53xE%3p4E!k#cd8ITSUNSC^n==Rkl4=SG0KT zu$ZsxW9ms}+-$Sw$E2pS+JZlFy^|C?!^gt8Ss=3HoEPmmG!`M4O=cL9%M0=`%McUm z-U!(6;9%+h1*W;!_<=oi(9Z!k_!AJ{b3_+x&*oj`cFkQK;K4CnyJA%K_di26f#w|F z&vq$DFJ*Di7sNYsVtr$&W9!; z{+Dndbl?0}`39F5R!iWXJbOrm5{2^fL?_}Qvpe8mCeeERm!c{+$c3lNW(a4fULKQ! zFlQn?u_g#{4q1jiCdJ8yp2TZp_cOXg!Wq9ZooI6@KNQ^y~pVeHZ z?1vN49gB0{NRiWaEFsO}&Gp{D>cZtUhAHgvsRgT9S@Aj4+Y)(N92GR#+gKKU7Z5)B zLq&Ql0>RBB4Z%0}8oBTM8j#Q$dE*gda!&c!?-4U{S}<B|zvsKxhF1Aqfx^=}5Iu1wl}%D1r(|u_FRvLFu4~sPrl##n0c& zllQ-Op6~tR&Y4;FT|A0KZGA-$iW^BW`|v$ z;$Roppt1N5o7Vj!JbN09(^5E3InTPlM&;a=;k%+a&*CY2C0~%`yA$5s@LG-YA+?Uw z+>Q_p_Y;yagzYT9u;&z)(Eaa7&)%_XmF_gA@+r-IYuWof3oHUJE48#vhP;2b6v(sdE{Tqc-T{ivehKmC0L|Ftja*W z4(C3Cn2^*N1ig|6WH4P-)t_*f;MON~`T3b0DGypLF@+BV+ZxWZqG6OF9)z|DL-Uzy#cx984^3ruwRZ`-<#`CLQp#J(3H>W;1DD%%P z@bwc1p!dxLDgN;WF(!SmjA3^*o5<{e0|^Q3Wu2Y@rE&53V?*X#lY&E zYMHG96k&!5q1Y@JC2UnFgs*u@kNj>e5aD}B{~>oriF}Vww5Qnt^&A@FNpntJV&sFL zwrl|l7n%+xdz@AS(=l8&0>$SLTUr0a1Vn>bX?J;okMCMLfzO%Px^`$7_oLMU(h?A8jnf4CyLEvjRRvo~(Y`YUgyAZv)dC35hcqQF?8VspBs7~gVO zz`MQcN_}A=wuUo6|GK9)JnVu_R2vbi$>TDjq;MiqJ(AYaL_ek4Isc%|_*uV|wc<`b z_mA!t<5-T)Xm>iiefUX={5F#`U{O;KBsE9J=J^1t6f$?uA(yVgJ=DU_7~#fecUex9 zfuX^fcY>{f67ow)&+^`w|8IG8qWhFHZ&%DrSRU7sTO?f6VDgqST>54rCNBM+@)&ax z{cZXO0MlGu`iZU@>1$zkG#~t_^IiGgp^C=LYLgKwEB6nxT##x$!`%zjd5dcp~QPltyWU=Z$+<)n1ymLUL&Xlc$!@& z{){;-KT3-2XIG^W*-(u5TRF;Q+IoGUl`I)X;6-M5%3X zphgJ2q`fSzI{7pq^&kMb`Yzw&o(EFE++j8jbJ3aoT554nam2FzqfeWfMURsRcApkl zu?@8W?4HRu(RS{*rh1&GQXgXsv)Pit)x|#nB3U^JTI>WSkp(+$bas_iWty4W4u_6Y zsPl|W>BB7dd+RM8NhTyp?PLjHBz;+0;N4r$0mgxUug5dS)BlEOmPea{O7k&g9V2P1 zP8rdEp$bz5I?e*9F^;Ow< zkG#2tH19whd)9M#YTo=7*TbBKI+G8|#XwH;39RhDQTXJJ9u(_lyD%DJmY9Bh=%R_tk!+9^ks=nK(E+%J$OTukEjKtjZc&jzrSq z@@n~2?rRMxoU0<698_Q&cZ%0TQHr%jI;4jLSJCHjo)cLqanPIuYP{=tjJ2$J5i=KgVv;@iu2#4@Is5_?;4Jd5Wz=BgtUef&0vBKnNTw{C)Q!}ZtnS|rAJ zsh?X&i;A+mrpaPF#4Xaq*=fs2_aYF+a^5U{`loe2-%oSyAfz+a4gQ z&RO|_ctB&{M-MfPH^Le!?uyHb+W~&T{T3IMyp^#RjX15|E`(mQm6LEuh_>qZZHV3y z&t#5nsxuv&C?RDmuxNgR(t@I*ZjwX>MI@E$Sm{vh&H;yIrYYAu_~gL5os^34^Mb7l zUi?ZQKhw#(t0-FhPh8KPe&Bv_?HwIFqgdaRaU7!ayfLoCC&BF`5@&M1r9}=Xr|&Yw z*$Pb4T;t3C%&!eqqs9O0iKQVdgO}*%lCW6g<;AO2?2>+SHTzln^}`3;yJeg5yzNJ? zLy=mrCQRz@uFz_bF#qOf$1v^9E6!J6T@;GRt^;e# z2+dq6edfa9$abS{(#5=(Bw#@~v)z4Px5KOnPvP!E(Z;tDp8bU=8m+(sUq0ol{v6jG z__sjT$a3(gF(8}QafKDcA=r`$vxkDT%3!-m77n0@I??CIFH`a>wd^T5wrve&g=#L<%Cua0`xFIo(D!VR&v;I(gYi`)>+?RM^fe2DVe&^) z|LtC4TeA&FxUyBR{OoHqx9pzQMaH|5^h3sy$EThS{w_z>OfW5O_{NSY@d?3f$-i6O zg5nk8NjnuU(pM5jW2qR;0o&H@(~|;wItyb@2gf-Iite~9Gadp!MIXrNfj4RXX^`U2 zPKdhnIC=SH`AW_a&oH#w=UtSk#=4k<>v9l>NutR)jE@@Y(0$J>_@Igh08Ale#n6{I z;FC`Nmf7*RO&czm8WHpt05M+cmTGAU7nKeYOJJviCHR6(ZG(I5`kZ{TGNNg}KhW2H zgPCh96OHH&ThQZeaHS0yeIZ=9oTWGk6kf>z)b7Z177>47$9Glkar~7RJ*0_OUT&|! zdf4(Jo5;?qG0{v$>HM}8FI7U8mjyEkJ|+dr7Y!YQRowMP&L=(Q785;k;7WLee-?3g z_}1^RBr+vCConFAAHw=drAYOY@v>)1{Wt!0l~q}S<8_Z+dvY8{XeqD#or_9Ty&`qp z#!mKcQfd8wo1@;oz+cyUY*hTotz4CU!Fj9O<%cQFOFAx8{OZT{C@*zMrkfo&&!u;U%hRUQ79jZTbCz2XgJ*d~&Xl?_&n;(ICOt6E( z?&c*@aTeq?a$lw|Eq@DZ;ttJAK`I{1!0DkEC2DTCFsu0fuelc$4 zX&L_@v5tADLd88{vN6xZY>Wx?`4HE)3Ksu2oXQV5hYy|RmL3zWo_NLmdV9uxHMuRQ zejtqr`V}wM$&+I3DI)0JHi!*W)97_nz9QsabfC@_zCIfNn(`^61qI{Rg3aJXd+5XD z_pX?2YGtsaRxYqh<=e9CKl2E`KBpfhz1gghLAq!VT_P;?>>9m+>DO-If(#jjG+n6C<1nRQ__Z$h z4z{ycuym?f#Ro$ppA4hqw@WX}{5{Hxd=)ejknQx`VK36tde$j|`6A(vMRJD=0w|~D z)o3llk`#Wa+Yhy=efc9OBfnH;?|QVSDtV9IU7p1=f(d;|>A-o}vA#*(BHiDVp;szk(|mG`_ttY+y8f6w;{kuLC}ajS1%RFmIBE7$b~QqjX+ zvR;fQ6Y1-*_ow+k;gL@pNG~rvfj|_`C(*lqj&09ecSN4ixiR2R$i7)I@?~jXLvrPN zUDGwFM}9%5k!x@)tq`zY*2PrV7W9Szd)NKwEBr9WzkegdQ%f+Q72Uz zRI9*Zz4zk@R9|w28BFlhAMe03bL?!9Nos9Ms$0;|o{1L75$}n+mri%mw;07p_0K(e zD@%Wn%i1sOCnP81&k2@UQ2C+h`R#DzxtB`cJfr=sks1gpPWR6RCGu2D=`$O@H9q_` zXfGtt+u^RH`tfTy=sW&!C5EGW@xNENfkPI&Ni7erk&lm|EE#%}1o8M=1g%9=DG{k+=$&%X%#1ua(u(n46CY~&V@)%6&+G`) zPcD;)V8e%sn%;eECih9&5WW)hE(%E)*Th`^BcXG@5*OP}QhYFsNXkt?GA2FyWQZ`UT>^fEd|#wDcC;Fky;%E_-#V5g?c zY<>KTrpLp~gl{~4l2=}gP|5`g_@w6x*{;Y0P^O<%vt(WM65{wEB7@176)gD}iywV# z5?)$1^v`EX(&=}#NC+Gy;wN?#3Vrnr?7?Ri4Eon3CdT8jI^6W^lB3~mHc5#TP&_-W z8F!1#aboISIgoT#Br^0$1+zzMyTBXYyD6~pzZ?(c*+9+)kL(#T;!w%^iZK}!CSR=a z9sGa{(x0kx9vn;X66UV+zL1jRo7qtp!04etlh!}PT*rfocF=vonJs33f2YE&KKR3! z5Cm8je0RZJ3=mUd-u+lGrY$1|P2550*sw~opzCkA-_h)`T#5lCh|Mdo-&mE$YdIqT zEMIqGz+F&qzm=7sJ{iSM z&^&22$$y)-OzgHqv|DX$RhQ<2tnOcA1rNX+$t8|(j~kz@b$j;MQy8>iN_5i>OBZcH z!8NyJS-q^~iKq^2QorQyW}V0sAQ+5@FktiE%SA(odrV- zMiP97=?pO;`UW~@BkPkK=Nn70MPyw^=+NHc!?Y?Hz(q-H^$y(TAuLOlFBRHksPAXN z8zS`WnCAxRvhJqnzZ8n(7Y5#Vac`!>TL|q4FYPd6Ss94XQn@eUhat3qoXDjO@s5%f z`OZOd6DNinFtR>Ouat}PlXS0dKeT6l08VId+tqOaMT88Um7D%h;HEF>G%-WuOY*DA z@;Hv|w4-g+%4{56SZo<$J8>e6eYEorzwsM|cx&}%-Vqx2f+j{qeGr`v_zTe>E`^`k zd2pNwAz+{URFXo5!3L^BKw$0St|T!)JV?qN$1RnmYX1BObMjN#av+!6IbRe5)c)2; z7*G1lk(JxBbet6)!OdJ+6T`6yWFb7(q)peV2|tHEC(uOU(&I644_`iMa%CBL?^)L; zopi&rDdCQcrKtJ_O5X$+;`-1G801QSGgMA!m#-_NH^^Y$g|1j%1rvE*7}}F<$?>A} z4Xe&UR6N{<$M)?ek{ePP$L+DefQT=j2xc#_;(@#_k#P-PJcC)IIDSuCh_*iRdKP#jssVn%u7Dl1w4}Lh z$qoG*Mb$aOOIQPSBNqfLO}*f`R<0uO#V69=?!3YkAX&8HAo059&6Z9DKuH$ojA)6N zntZ;z&pkr5pBj`COf+a1*DC$q_^s2=>Ck$8tq)2_&?$5XS~rcBLnoSReYFSWc~7#e zKyC!wzt_Ol0(vO(cm-p&LN_R0#l-7ywP8RG8RyDWGGogJ{T{@T*ovSNyk6;fTlcbu z!}mZnRv0GkXLvoWPGp56uMU?3iEb_BNhrau6ihJrvEof9X=}#hPg|W-zPS&0xHwC{ ze`S$PXhtDkQTVHudFYPMw)=1R$E;eD#B_?9nq`?-OL4cebs8l`x;aJ!9BZRt*&pg6 z75E+=_9;1%qU?apmIE1`8Vr-hd|$Dz{iR`ypVRZ$70h7SbtK1|CU2OCgzqyFUnArK zvFQv!9zR0SmvjQwUDYGr!m8Y@N8<&4i#5hbfLKz`$zGD#xq?o7*Qp7+^nM@&JN4W9 z4ROi-K8Qpi*K@?q-ulA&)pLcjkmO}vGuxpu%V&_1Ui4FUw)_*LFX}%1*1Jvd7u$8> z1xDQHVcyYvAgGVB_{L8Ud^fvpwf*`)-&D5*JIRDKi}(fi0L z(0_^0e`PL|@|O=oqohOEpf9D`10Zp~m>6WbbLXQ!^Hyr&IoV@rF6%5yIF8J6H%E(Q zGIt@dXkm+P?C}sXxurIk$lt6Yc8mvG-e8x%jpOvoIz5n8&tG@^Ig|ro6!5dU6onL* zTAwrfmrF2DTZbewe-_bPiF*$nXF3S@aq+vd=PhS#p6=Zkvd%r6E(OW;^HsbEgJ~Mm zafzda|GFcjEmX>*UJnpH5j?9H6`;x1YDP@pVcGM4;($|ljG!1wGgr`5VN{svYUd1} z&VS@*{QHq|f09SKeB8#EIIBT=5je%b+w?M;?FT=DM(B#x&*Y1V-#MR0NL6U~HywUM z9sblwGBuhPT1?7yTjJu2_wPwb9UmSl`_O46Dmo`zx zekI%-#+WKi}_L_vx%PN`H$3F~dX7?GwTvcIfHx4ECSm6MMvv{XG7xnPzfE`;w zfC?9hz~ntskJZwf#;HE~v%m={iy*x$yNWkdEs)+T$yLO>&7ughWJ4<-9D`j-O;qKpH|)YE zCc~X4^4PGg(^}7#22eX0SCfPXW_S~UpSb-Qj+6Ctdg4h0ZCvc-P})UAII+<2lGtAh zU7w_H$4+l;&%olBmBl=585o-pBOJz&xjs0WWP`R4W%L(=Wo{h6pDyWJ3Vt`_lka=0 zF^QvPed+cJglwaWSmMD~Fk(n|FTTb-+MMy`ZJ2-R4BgEqIR=BwZX8YWgS>qOEJmra ztWpo`bFlvAbjD}E&tl7CwMHh|m4qakuihb(B-ZYr5Z~Ch-?6lv!H8~U3%|4;8n)M3 z_<;KK0dQF_DBi|88xvZ7U+9+227BGY1HqldPNFo^UjR2HR9%8T-!P~77a7Er4WN}u zcciXguF*D#SHiOmn)d9>e$rd`B*x|vwsqX2$L}SeInL%R#=W_fR=X5+e-%B6za4xN zrmy}o><%T^#3cR_LNdr2VMliqv1@vuZFXE|+pJJw&g8OYc%pTYQ1e8c9r-{~*>V1l z!(K5LO8EOR`R!ND(|b%@1f||v@<~i(Bn%eHrpOi+(})iF zrDQl=bn1KLWAI0TCP4ES1s5!xuj|~&iUn{-fS-D?i;X~@YePkT%PyNNl9jjhf=#>U zoL_921bO-7rD#1MK#H6D6K=Mir7Q_Hgjg_h;EA7=9jD^-26Vnwhuo;Q=l>yL zEAgz=z#+2Q-grJz0Vw{k)tUC(Qw_qwv4KOz96V(+)Rjchj={vuArcI&Im>O0Er zJH64&1MVavQ`ZLm;eR3-4wV8`PqG%HraNunRf))2Hi->ZL-1E4Tx6|biqFMU9m$X; zBa2ZlMdl>iNEkS!g!WU(Y8bhz%P+EW!O4j(h>}mZ7ISG%!osO%33EcDF1oVDp);a= zf;;z?!^OQ#HS~M0K{&e4lR{U?C@~8~-Gza=Cv{Hx7_{amuved1M%fY*pU`aF-SbMx*w3q^pcLIkW{NX}&QUA{6oQP9i5$&eWRy z$af{^o9`dt%JxX*_Oc#^P=_T^n>ZWUPLyQGgGdOQzS=8ZjhI9C0@dHX%%Zc=OeR_} z#OCrO-6Ka&nOJ58u22Efw;4fx;PeA7FNCbS#A;D|3+#G`2}X$fJIj!Rfx}bDk*a4B zqCX{}dH!z%2bEtNUSfIHFKXk4)XisF>{J!Bk`}2S}5s#)Mu|3)km{_x1N+osi25*<3!TUATVP0z$ZUeeS zvTCIP4*M$@)BJ&I|BTH6Cfc{fcPtB<+`p{pk?`t(^8{$_rsRD8pZty^t&cr@ecMb{V%sX4{F^>`?dqbIPWT9i&H4d4t&Kbz;sG8<0k{~ ztroq0=nk{$wx>K7TK`Om!8w9*t#26IQFk2NPG)BQdYCU-^+8sC<5+6DwTUJAzeO2ahjWU=a?cOCSwR7f4Jf%uP{EUl+sn3Npwip2dqOM7G;^ z++@Vn3mN-f)T@U#KdHl2OBaQ)yg5vjkd`67Roin}x{(ujDDuHP)7PHRy38UW`0K8I zE01%qTeu`Q56>a(6Xqd^QRIOkwJs4}`pNlJ8?LG!ER`tForyR3>KPh(Qq7Ba8kLX?L95#0kjx}PhEK$#;FeuyDe-vJQ zVeO&)&^C6jJ|Mp6UpH_6-S${8=PeU_&O3W!UVv=~%SK$6(RRw#q*6GK`A1fr+yh9z z)LC$Ht59nGM%Q^N!lt!<_42%D(%{1gul?pB^nj$(bbXDYs@Zu=>0Z>FLR-$>hz z-F&52OJB)i^KTFGGe%de{ScqGap*2y8^3rTN zx+`*BR$J+mi+Dp{nxZn!G!Q}62pO^0E47Aj2tQF;Nl$_QJ{W0;*?oW{H4V9nq)lvLj(X4>L`a z9z_BfPrYC)l$T-2Uac0?cnni*S{7HjBdJZZ>DcAo&K@5NFVzgR{$a+%2H1?$V3_m) z$6IRqnQkcKA}5T)9XiqPa3JgJW53jyZ@rM5EY>yPj&9Yt>GB#L!73b0tpn_0-(mV< zhaKwQY3abv>-%R{l%l`Sh}lut;8vAl#lbqm$nfu5?a|O}9(Fl_Ak`}8FNA6tB6eO4#1PrJ%8emqCPx>+DpWbC2^m)o=6BMym#cID6=n zYNpzIDd;0+pz#BnQ0c*UAv)SpDqsGz;sl-zm}~XW2NHZ$Ni@(7V}eLD8`}U*^4NXR6MbhNR+o zJ--2q)j^@1rj+eNr9ySZYR7~94u3^|JXnNgSUhC+xu7#2!hzZx)pMDzHbZs<)HRoCE4tFCveXGAROYQz4+smFikq3>?GEpi5; zadTHi0iV6G)N|D9{2@gE?TaZA1+BHnMri;;Re-d4{43Rvn<02d_4SM-Wb_1k@LqY? z75@zYFEU*fTWf78zQ5}^@E)jKJy^*?%};D!xdagDWs{nM;UJ~GA-mw(Q|xOjv!wOb zhF{+C6up7{1=L42Jxyx-P~!Z=?Geks^}FZ^N)afp1)`!bh}}9;V^%OkE(NiLy7c})P;(T{?)Mgi7Oy^HM{we4c|w? z=oA>9*DCA&j)>6*`r4C(9p&|u%@~QsnqPICq#qLk!PVOFEJ+EHcZ}5~VwyvzbGY@{ z5F!ReLCdDx$WXAQ(L-ysIyTZVU!K!h+z-t#u@AgUy2?x&&$r)-Hcd@vQ2GIw{vb$(2Mis}l3R|1M8Q!9Ta* zuUsnMpJrl?lV9NLD1y4vF27V_Y6D?OCSPL*wlvwH?n^>6nkphXt8PYHo$;8Bm;^=N zZAIzG-mfOlKR5zWc3Pq#!y2K3bEBxn;(oXF-e(X+&0|)VUJ`mOSqlBF(oz+^s_m(9vlh(8G#;4?OpXr#xh!3el;IdnSj zF}bO}Deke+Jg=FokHD?>V(LkT26FxPW|DM2F$IHZe`>Z>f!#hwI+H#44sDK{zWW&6 zNR}~NIt;lf(-i8Pgdn{{74l%6k_^;Ke?TI|)}sV6Q`s9=(LU#&HK6Xk!5}^;LnZoy z%i`XV<5=I!v09&P>=Y zgm~2lvsl%~N_F>w8oi&@Em-hOw;|%{)AVp_Hv(aALOg*qZg6$@Bh=$?EB=qeotAq& zCDMo+fv)|07>7B}9$_Qe3?{m}s_uF=a^Y`E#%Z5n#!a7}Te2IiFLC4Ro5y0Wn4?b0 ze0}YbiXg56GL$MyKI_`=!#w=&>VVTOk&Fr&N0`|ec`5pIUv{-N@6>@L3h@8c&)G3X zB>6jShEvA#hb}dkVQ^4FkX38PO&$9bvK?{>-Z?$$*(wv68A-8!@Id|Onkz$0a zFf=x$);*zf$kpAa3J=$AHlgNr%`3&?YZ{Y+2*f9jzOQ(z|BmzJA);hQ_xl&h=H7p6*Q{Db%gBF#O;RVf1o7;C8Z*P&MEspnVb?#@IQ_27GoZKvHPN zG~LY6)C5Y}tNjn}C1de8z4!x{J)azK^`55!Dtpyxu<%6Y;jMd28RpXN-}qCMEU-dO zf9S&%{K}4T=Q8%#V)$a%fq&JM8M8`t-W%uIJ+?=Syh($D$&vrchG`Q*7vNvrM)@XD z;8PivWWCfRESsY;qtr{4Fpq&mx=~r)fs{0b48jwd+jauFubC<#ADAJ8xy#bldJ8DG z)~gv#$_Am*^k^(`RAYj>(`KKiNPR%9w@ z1=xoAj$PQ%{O=~JWIms zAV|ovE{6Xy8`%oDTByUBbu9m?_BE6L!x}{J*_e>hCR$l!*#P5#?o+txZ4!ZDM{&jX zNh>Gj-XI<9QmoVO9cvYJ+>0*5YdA(R6=8T^kX#pfVklp{h4p#!t&B!lVqEDj?$N#T z`Rm_gP2$}5D)I-W&4iC43q%V{i{%t-4?Xwgs^Tv1mqQ`3J$!iFJx4zIUfz5j2j&u5 zCF@;9L+FoRbAl~)bol)pG$b`FM1B|fh3wTB1ZgWxz-$zMv319T)RJg7`0Jm|u}7Y( zMetoZBaof~S!9lb7$6rfaHPqhHC|6ZVM7LxFaZxy`IB(!wkESLD0Rn~OWFj+s4DZ3O+{>z)A@cYPmA9nDd4)iQpJm8 zc6*%-DK!Quv8F|q2#Ni9hP`li*@lZxty_(2qkz59QkapSY$tKQI17hN(5S^$W?{B8 zm^3O{ELw%xyS0kP%iz8VxWjT-qr14nh5O=Fm2=H`zr`$Lqf>;8wpGqBRDCfX-+y)46=+nZtjLq&l2_UQ&x7q1&S6+Q@Mf%FQQA0alDO7e*7zU?Zj7O z)gliB1pvtRSOzd3LyW!&bL**~>0;$`60g`$JaffgTEnbsT2nt3tmO!$ErSlFs|0pJAxs@aP`NElCgBJtSFzHcOcIl{5|F}5BDGo3|LvE#rC39*~XKwDZwfpxC43jDMLN!Psn&i7G$r^epEmP;J>k)J&@$oDS# zqL;?-F3=1?CpE!P6WcR-nnH88C$L2KvZ(4>rGe>n(FC`(AHqL21eAA)Pw4+&{hSX% zi|H!^=RjW{no1A9oF_QZti!QD?p=wRfUxShZ6O!;Fzb5nKBy>3Y=onD8A#o!4rR7e&7sr>>Q zGFMI}bZ53t?52GTvT zb391(=prSR+JeTshh%MkzZd68X`k~x2E6DO1(^f6?c_KgX3z5kbVsr;=TLt#gc zw@fOV6quX6sG@I}7;_rof}lxauE$61K=~*VP_S7<{onpcc`54WLaJ6MrZXGfv8>v$ z1>FH+q2$}Xj=W3OlX?amfKL?+*$bhb`PeU{yt|jpR|#Q4RGo9JEjQ!NimKCRPDY+J zgULW>VvGs!vW%|wi?42t4>lt907W*{j;>LU9pa5)nPVw*urAb#7ADgIB-}7ta+Ua% z@q}$Dh6{WM#US4OJe8b+>FaI#OX@YU8ZkR+wDDLCc`_SDOL!N(`YfPXHOXu7KXLtT z?MnqlA93^H=4lS&d2zA#vd&y)@s5!*VFPTxl)NanhcdkBWD}*`xeWgG4!S})SL6_b z|6FSP+TDpJDO4RHT-s|9lD9!#IqcN-jmkl|Ex(GuGzy#U=6>g9p-Xm3Nw?AsABbP97Tfx-%GAauM?NVwq*aP<%+F} zs13l0tj6F@>*SqL6(VzYH<4Bk)FFy14Z}j7-m%1-f^JDMDUKV8$ z>x)16kVn$s<%_1#S@GGC+or!Q<;ScqY~;?lrmJ^$T&SS<$z4L>Y&q!{8(!_EN-TnS z|9Wcw%Brrj&9<$-(;2F7iCs_NJ|5ows|8{RtT)}t8#L(s)aP;K$s>ESZMatP&z z+lRs@b}=vp>l*Q}VCyjTBWpfPTWE4s;Ztm60}ZJO@RcckrX=op>oa|(sq?ZweyzH` z?oI?;R$i996uV-hAk#0${?GV`u{V*-;P8X5;c=zB^jl9qIge8iF>E;XeE~)?3R_`o z>nR$D6>Vexd?L)Y9OVRv9X6&P53CU9?%ictAl4Y-_*A*d-sF>Gml=4%A=L(}`1Z@JPET49QL31b`{f^2Ge9Sit8E)Wt-FDsWXU8KP* z8R#{lWh_L$piM_9d5CGbsbS*zlEP5#b7=Kxq}q8Ye;_V{kis4J0U;`i(PtmDMF>cI zNpK6g8ezQ5+6`9VWe~%E=n649KH(IyoiH9+;O0c?+a=BH%v&o)8K}x*@1=ZLI&=Os z#7*m*#9*I;8ZANeSaxA(=8PEmm0>9UcNW}v5sDO;tYpoA(Q}KOh7gOw6J1y> z9(n)2`Z-5~9^jz4R%TCzEJcbJ`z)#JIakLORa77H@Mo+a^I6wH+^M+5DahdVq&M~& zy9?8MbAH(WhD%qtd$EW4^JD|`NaL^j0;uz`rf#Z@7mvKpFVgEoPlhK@@e#rv$7&l` zwI8Od9bh$OK*j5pAW&NR5cQa!@APwHnebHH^QkA9|3Ryl&ovGNlD(IQil6kYa8AZ8 z$EWqNVMNt<095?KGL1UO@S5G%&n-r{!ifK)TYl4ioyL6MSLecs8M=NzScW=Z=C^1{ zNi0f64f!tid*`|+6{o4oprv(Gm-QAkh|5K^3sLb3fS4UPXh*^=o*fW)Uz4AT&n$d# z?zZ1Ipdq^gou#vRsW@?NnQ@51K&m-l@Q^z?6#u{BRDPgMNMn6No_CSDbY=`LD_2_G z7uA-k<1~v~9D_1nEMUJ)d&3X^Q9=3n`E~UMCuaxJj)1A=tp)?9<5ukKmkdkw2Y6=J za|*HdHom-ns(XDg^B@(qCOH_==_sFiUb(SU{EZ4yE%a zMby>d{t5Vxh^hC0Vkwz)-qlB{)I&?;Pnj@0FCBD#Q&;eL`kCIB{C+`ip)SvOCU-Zl z^KUt88Utv;&YcE}fBJY6MAK{8p%RkRp&2BnUw}`oq1y^B3c@ zmR>mK%P5+3fAU7(P}b&L3IENXh`kFhp&3sizd5os8aZVVHoYBF-rJtqGP7Vn z(B8D`@SkG)tal%5s(YNmRjeA99cd1am~c1l2d!!^Fjx>$E^=wMznC!b9ce&>Sh}lP z!QE}P9~}uNawN&DV=sZNg067ZU2|bCj9~Bz4UGZTm3;?CQkq2iO*pL1Z7zRf@_vBT zN{7aqPT@$Z&KV$+XtNrU5q6T^X(f^)%5bOz!Q{MDf}_{=$tCC4qMRgqIn8OiS@S-w zhJ^GwB!ubNu9KT?WP`rg=~_uOyp(Um^{Wlv{N&L%RqRuDlK_9X zG$5XxrbOptM>L9sJqUUAJq5L^_R~f9Pn6TSy4{eqe4A*@T(UOmMLYlz_m-H^X%y*K zT3|7169|EKiPPve6-a@OnJE4bgV;gUDvAzo-*N+2fUM*FH7qRZ$s85Nzt1gy5S~z_SbW zDDPKQAV7?UK-J%Otj`zqam@euuEBoyMsnqwX}^c*&a%vhAQeRvr{YC(DaJFu0{cRM ziVGWyiUS#5V>}4%;);T=#^U!U!ZxpyQ@+#rNxaR@7kx$B9KF8Q8=_V=%02?ti!b>C zj?mt}%3vX$&CdMoOy;M?fd364MFw*3tm^}@M?&u%T;TtkpY!n{C*QUpjOPo)JJwWb zLYJy@E?g-KXfJ+BdQejmM9BYZ;(Mn;tXGl~wkpOSDahemX|B@dQ_vG+Bl+x&w(EgNQ$J2&@;ny^N%&NDYd!Oyq|#4`@0 ziwDp}yWb$9qv)x``>5+gG4*WdJ%Ejbr_%zqD6Kv=la3I;aaBc7 zIwC1PvxOP5{otiqehOny{7SgD$rW#_Y|~=!9|9H^Zbjs6F??mwmwumvJQYJpUPm$i z{Dm=`u+t!(x7pNsG6-{c_6uz}-u|!QcjY4nI9S!20hX%F_Cmuh(Y8B9{7sR;ZfS4y zlZsVB<)e8C$7e`LrE-DW#|#EKZwOPg$gf4=LXYRnedcduug^RUwjAfvrKkNTE{atR zlL4%mnb`d#6?okPB}*{y3I)(7g zlkjAdXPL30qw$GKp`+X?^hj>p8NZcAVL7`0Ga<@8<8_$4P9v*Uu0Y7*og>3jGaxx` zWd>4mqM`ZZyPn#$tXY{uWE?N4PbBK`kurlHRD;)!m<>GeXGtwreUtF_zOaO2zjcyP zhpvvL%8da1=jQq)Rgqx7%}~yt#Lq@*il&?xQw~X{=`b~MoAgAc282cAb~7%&EK*|8 z+9uqOQzW2Qb)Iao&8fFdf=f>NG69Be=X!FSsc_leJMU2ZV%zOfsue@bTdeU9t}b4i z*Fu<6P=w$!8=Qn^P`Css+0gMy@G2oDS|k3tUl;uhOfacb3T@$+F`s1no5QSqxFPx4 zmG>eutaE;kGM(K^*m<~V;(pRxRH0WvKm6v07k%Q#?WhM0 z-FGk`m?z7A;QYz?bdF3(yzIqXm?@0QEWi=Ps{_m$0~zHfuZ??D2l)$yV)i3N$YTjl z4?X=j%_H1eb66QS?1w}a#xo4*1%o6X&X$LyUq}W0Z+^}ZF(3^e=x3J?PB-0ZFJW1z zI%m1PXf2VK*Vse)+O3>bFL^e(#R+{)DWzkpQnNJv_{3BKvK*;3%w(+p&pYf{N1#LH zA>Jdxtjlv|#>gbd+7rwy^oNkO@+y>6JE*~@-YN-L#|Pbg#R;73uO$#|VIi9qAvCB= zQ^n(@|Btit3}-WZ8@>@MMo5Ug#hyXz9mI|qn;=$fi7l$7sM%7prCO`Dwr16=qH2`V zYK^LDjcT=}RMEG6j=$%_d%VZn_jy0u$9Wv*9X?2MUYGOw-M_O+4l^DN{hn(N#XVOO z8*S?Mrr`-9wcX-Sxz*$bM7|6&UZwO7`b~E;VCVORK#M%M+33K$J7RSx-g+EExVwar zbYpzO%X*YY#C_k$x8#+$}b+};ZhhQ8;_jV1Nclt>}rDJ;xZm9s+ zN;h-(!msOEwPa-Rfe{bA<|+bgnW85dJ>gj%7juX>Md(-ROw^e(nT!;9p@1uDb?brk znPU;!^$B&zBg2|7%6uc-tq>>o#Opl_)(XWj&*NsuIHHbm27NFw;)e?|uH}f(fv{Ts zu~ikxN~<}bTp7*`?|6mClO@h&a#)q%^_JXxi;~&x=E#~Z%FQ=euzSTGhtZOyTFF5^ z3UkI8MGCWYHy=B&9z6&A%jbNFjVcaxKhVm&K1IfT4C8RlIbScC*J2MVN(^8NRR%~m z*^?hr32J7UvVAWQqW-u}V!gTf+$vE$S-~lnRVn#>t7E~%*VtpihFIuxtPyeODut`L zh!A<0fbQgddafJ8EmRt#ms#8;Mg&FQKG9xV3DqlHwlZL`*Kt`=@&pIB5fKR|nlwFL z>4{%-<;}zeKbbhene}-Mk@4B@@-7~XGPV~JJ2f{n+E8@<%D z>uea*GI2(&;)FB*V6~rcFeh0nXS}LwF6=m$m3YO{(`I=>!|)efLuj?X1ZiONo-Is_ zI`UB-b6l3Ake-fSr$pK$j>Y%D*GD^JU$3k>d%s{IcRieu}i_ps=ajv3=vw`g7%c$o%CwK_ebA+Eq zDE4k;0`O_^pjBh(cR*Q<4kHY|=CK+gN7sE_!1(H(HP}4vg=RWm}Mg^7~Vz1@z?;>l>H zoI89&qv7{2&b-2HK<#3ml-tcp+49R}ny#@hMA1`kl+KR=;x#c5o3S4sk*u1z*x}eS zQzo3bcf<}o_vg5a-igag@OPRnkfoOKc+5{R^WoJG42oN~MRC7O6V_{a9BdiKELO%` zq@QiNtI)qvq@V|m2y<<`r0ye?;t~59nq-Q1P#M0vQoo|U*}o_-47GP_m-(FM8tFB_ zj*vYR@}-$}5OvR{nzU7z7A6qm5tY7R^yYL!p@XHEemeD zt>B9?J0|u%NrBr|udrHCZ*W;G3t7@mZ)`)!4P~dzd+F~pGJoLr9leF4SseTVd0`@; zO;5(>^!*Z&nJxP#0>IzwUfvEt1nH!S`A$V+sdcIFW9#CkJ;VxT^~GCpr|JMHSnCWv z!qHrxeUpcs>i{A@p3|<+_xPRJ@|T}-Fi}$^d?Zs`Ze*9i7sUaH=$Ej6Eq56nl)~(i zU3cmcUh#oW+0oa)d?1zKDWY;6q@&haoRnOl> zTh}H|yPUD+_Os}i)eDwM!gVS*DLDs0uEI}Up42$rVf-5^k@>h}k z%Q^DD6TNhz#zS18ArUqj4+;Pn1i-)(RpHjBr6DklgTs>pM>Q8`L{xv~JrfAKWvYvP z>8H0@Y$LKh|5W9ZXRbFNqoJi%;7w62il?Z4<58%=m0YpKVUeISA!YFgS=)32FoI6` zK#bO+FA8~0v(MPSRE7^8JZ|{9q=V-AceC(cZEnJ&>~c=heXNwfBYN!G!$eg*CSxcw zu>Rq_fEHSd=+BIr@inv_LoY?;4!@eUCF?QeiPp*M@;WQ+2hTwm4~wAgK@~zb1ZiD< z*GD4SWupW?q~)5#+_$vh@uEln%jf*;CsL{Ia-O}fgsQFZF~8#ZnZ0~CclaYV#Ylnn z=Xe$aYQDMS_^7_J8=jj&s)<6yS2ex|C9%3?bT~aL;dceFIBTWc=#&hpYYO_gZSGo- zz-#hS8X%^Os$ixzG?zoQA}sZ#d*d5;101}1FGcmGN;z5FF{B*sTDMCOBbZHb8AOu9 zXNhX}3zX->1QIWIw<<;(DENMcmg%-`uB*zrtx^>m`7WF!|e{stMCRRS0>eJ2NCJ*OFSgh-AMqP9G=Jrv5 zQY6QI%YNz30=xxVCz8v{V@pTd?UBB(<*b#f<$c+>LewI?Gnhkj9RE||vD&Slzx9cl zLW#b?t^sL>$Iu$ATb%BLZ5`v%fDr{fMmEpVHMs|-S;^D?)3 z0daDL6;oRi~2N9I2QM61xZ^L#qOu?_@o>+b#yUP0m3h|cI&SbsSqp0{K)YZVgdVntZ zW)#YnRVF9{^PH%iE$IyeuK20eC)@wa=giNqhRng1Bt%wRWG`&xH#=uxlCah8+OREA z>i1V1!6WJ1gLw-SKjJQdV}J1ly~MFGL}^E1=7!>F-Q)ym$d=qCo{w&ZXl#tw-QUQ< z7xx~So4$-SBFuiFpc4hTe`)U|YJ67%m7AfV=>j|gxnyAGJszV_DrLXKXt;I3U(Z5E$>TES4 zoyY9)9yl%^$<0ez)&)j7+c)cJH;49vkz_E`zkJSwty!=4Wt2|L{BJcD`g-`z8KD!l zarep#?tldy4*5PYBDNsNB$3soEnLhwOaTFD!nWoW;=;S^6@v|CnK-srRRUkuMx4fe za{S`SZ4Hd}<|Lz{BCys4gQp~%3_O?qOyDDtg92U?)Z8F0T)Nkg>QdlodkV<74KM)U zb}3596*LfQmoCR)d13&D-zL@o6T)Km@ET)4^sgU4sYt=lO?i6xW;JQeMx8u;a> z_%ENc-c`Jw@YV#D`fEQWbr?7KIp<8#I?TajU4phaGc?xNJe3X{tB$y*RjC@l^jLrt zoo$_CQ%q}uk&d0UFPGhWI3}_v3AWc6?bGQ^4qp7+kQVXICI+3e0r%*G@K` z@&C<2ib~a|+nTntem$4C$+=Co(C3Ajpg=eZ-88n)#DPs!IbIpe+9qb~`3Rp5hXVHY`|Q8iz-?BB~967Oh<%e1pLeAOw}_X zXzSt1gVRgF`>Kv{pR+RmzdmR0C3Z5#o$DIoSE$75@QILC?KY{8drtu8-zSPtCCtgK z7L~Hl3-~hP4(SXa#B{5GT>89!odsPI-iCtYYdXZ+fAi@;r?=gF6s<3n z$_4E^aw5oauIlp$y$0G^MicbL*6i9oAY8v7;+4<$Cx%r-Pd|ebm9^CGe+FWCGfW6_ zFz#S}L0+l)h?e$J8q+ojN&Qf`5plkLL;=UpF()!|uM9$I5}59@K0g?-4CS;=u&IwD zV7`ee3H*l(=nw2CXF+46*$AG}K_kqxzYZ>OaFL31m@^;nZH{4RP!i7}`N}Vid~3Kc z$-hFhtvjdS27nRmM8*}1-KhffVsM*AsxiCB9CI*Jd*mojsd$d=!;6_p>D9mS3`Ss3 zyLgI@UNnFT-QK4_L-$QYU04w!*I#i!+do*aS_h z78GN(Vp0eFMk&j-SJ5hi(jNxrA7Kr9Ld3sLBOLNoG9@!yRhe4M^jlC07 z&E3MXRaC-;%p#l{#OV8fld%|%v%7<(f3VAaq=DaC{7T}aI-<(Ibw&md-gJb8{c!xO z`%3z6eD!AtMex*=^Ke3!?cdl`S||257IziL{f!qF(k=hSp#2!3zYzltApVVd@=hjy zBlI0e`ux56zqy=e=HM{^A0_^lJ7iktXNUP?-X2}^*B!p;y2jR1)%b5Gl-u+qe&)IL zH4!5ELNJ~K+Z2;=>%?-3DMt5zLx5K4i58dIhe&!J!XpljuT3r`3?014JH^I2Qd>x5U zhJw6&>sdn0r}Ehbb;A{#3hsM1BRbWeN`v4d$@bAA3-#hd|7wH4T=0Q#_-hkq#))LpN^$2PkEPOyrrD3Qwc^_&t_*<_QxG z@DEpYP{U)^kC+iBp%m0CRS--!cTO3=Ohi4jNCGwT{T#(cYbcRd(O*{hxxY01;5zC+y2AWpow@qGtG zhb{9hw(vl~om{4>z%0Cq=v$u70lZ#$Tsb>u#bfQ)Kp@R|J^ouZ&OhfKWrgv~EE}!^ zlZ?I~KQQk=^jp!txgs79J-TaTk@tt7{%Dlzw5MOKTe{Cc`+o&Zh4E6$h`co_WlkinV@2v7$%uO zw^pg{lFb@B{h3W@B{ZOPp@AJtR%wa4{(eqtuI5)*2|JPPoO9mc-LqM3HIz|(-y32! zf-|(*_Gh(=6c1fLl4KY3&or_^6Dozg4D>z;nkAVa!MXUIxZ=UDNRO zGSxXhXN$LsmV$PQ`ZUht7sKH1%te<8c3~I4RK?jOz(EU6g$8$ymL)?Uo2z|+_tHo7 ziixo(Zjpbny9cnfk(GN;Wv}v#+5$5C%+k*tMHcVwUg7)T5xHqAz>Kg1Z)82n)He~) z3y4`4$SX`)R61C)$j4Fs9wnO~k)7TXFN<{-CUz&H(Ke zgi2NvOPHG*NdIh$MLTgVQm?JiSJ5?$&ia7YhX7hrqfL^EG0`539^-LYDid1av<2AH+o$67cM@DBG*kkwst$(ZyqJNx z8+_7sWGmr8%v7lHTQ`6ss9B`!s(Sc&t&rCG6@I?Pb$6KAIBqO32FjFPb+vjolQ{u3Mp#3k(*9G|f0time43!3LAi z{i;@So~v$Gto!*|2_%U((6gc&p+iqrUx--+}t0 zsQDlo!CMRo=Dr0~DDPZVz@}_?_u@|ZO+KYl;>ZL@MW~;Ej=e(0V=Z(2%i2oL zUrX|QG>@W@F0VAG99RFi)9c>a2X+)9t}NZ8rsEDFFAj=B?O4;XA}>*R&)grtu@J`~ zF_HA1m)@4~odIg&rWSvPJe{J5U8M{4M|oVg)%sE645*5wJpCQ+b>$?7qk}D+Jj--a z+V)ye=!%_1z<%Ei@vNLwm{z)~+4yBG3wY--_XoQoMv9`ZNWmvmhP(c%z=tWDjOC7O zqRfmqWZVHtg7>MpXUhziu3>Le{1;6mns;0)O2_p(?wf}LQAnCWMu&ePvi$aOAfw$F z?6Ghn{l}J4^jRa&YgD!-azeBBo{8k(G9~Y=~zzQcO=lkZcRyOst?Z z19>UmS^Es%Q(Wy7;W=OLN)H~y{bH|R)(ngWD3r|Ik@-J#C)y(DrRZys2eiJn#2oKh*$08((ZoZr388k4eJZO0eLM z#1mbPrA#gulcH>zQ4MBK(9p5Nn7|nG;FH<;&)L1BwSCeN7jpxY5pnPOI(X$pznXHt zk+g(CfG=DW3VS$yQSiw0;txsagErnqy?xvKU(0(Ui+E>=2&LM*p0?ujmu!tHHC zAR%?0vuLoxN5*B$C1v{=PixGT7~G{`A0CAPE}NuMioy_b9iP-n`49a&@b-COch=lx z8%v!dgaX8llb|Bz{dD@O0)%Q*u?Wk_{+2O`)vSF|;UWtWh5XOD{*cpKjEOJ<6pHUL z&h~>v0!k14I%{2&dP}U;h3W6d9g%eX8_;mj=dVwL*;h?r1~y*C%#Nvgara)ST_%4M zWF`txU6C$UfBZ#CS5i5fZ~Zh(>G^1gF57Ky78UPGR&ZC0RkopkRyl!_?b)Wdv<@0h ze*g3+sI7k!VHybxNcF~ukUco!0k_-}7gU|%T$f9+OLpIN01LR8j(u}>wmM2>8I(}d ze>PO+jy=mv?4rIx+NzPGY!m+EX|*P-5Ws#62v2)vt1Clbo|M=@t$cQ~PL#tdALpY) zTMsdCsz3IdBN(5~2dzAzO5bs`O(un((~Ao4w>lXKL>N(p5=^6X&HY&9<1Z$b?~3a%A45Az967V(sh(l1&ps1E-{S7WtIXAAF1Y>BzQwDMTC&0~;^V+1Xn~TMYL`Zi z#YpqW@45##Z0l~05&U4CLsIy@nu3WX;dZ{3%1(?Z3{j!Q)?cvfF!qGU9{ZJ-tFtWB zF8?e?mr(#qewk`9yrN}TX$_by>9bx%((~+Lk0$jSaWA_g`4&{1f;%jJ0?36D zsIwi*`4!&K6EyE!(g>>Wgfcu^agctN=fZWM8d`r_%@h4fQ=C90$g5$wtQK^3+jr!r z0Bn#8kG?hl(LoW!6>bA6v@dET8#Xala^yuM!Cx-rkjJ>>84^Zs+V9@QxI2;4k{DmU zfUAx8QDr|!R69h8Lu2!AB21(%17Q+Z(cc#mum|nNu9S_Ne)qOOu9#1&`gQPN-Z<87 z_J%H!7z2wIzUkD*@28hL&`v~8zeseBU}{E=K&2C4rUgK%>LM;H*zOH>^9=uZ zE990R9sdbRsQV2|V){~qL;p{F(@cd#`HYMf>kKH7)pE}P9H(vfKlM2$xcv-z!_yP- zK@V?ED+!`I@2~0faKPkbhA7m&zvPp@_*3aTpAmo4I?ww8k&$6LWS`A|{$Kg3nfQp| zQIUxD;Gw`~=>xy>*YB~L*;;2)@uky{^p9uURL}EF2A}Z?Zek$1Tb`anAK=*YyldYB zqZ@S)9SReF@eO}6i}U=B<#iUCSrAjnN;Mi67)EoRFJ_(%nX=LryCBU9ZKZtcah_-O ze-HUYVP=qv>a|~+#Ot5uWxwb04w@b6oizY0BnMI`&-1#(N-DDpAOWSU;;_qJ%hKn0 zqCdJ}JKpvG{ySWfleO@!x*O$Yyf2kj&>49C`UNWESTO$^whdsDh-5H2uRU-=HznR{U>X`hU-#*9Y$%ym`~GoaI%#Iy-v(hu`Lv8!Fh2Rb&TV zGisBwR-`El8VD)XWVXm%V2CX(b$n8eu{m<#f*(jY8`q3HM!mEi^ipGX3%ztf9w|&T z)t!WpDdRF}Enk;k=ZJc&9ueJ`&jT#|tT>cXY{7R|%JxsQ)H7f}9CHv`7fU2 z5+hd9^p^N(GzAQJ#|KWBudT5f$LOgN`svIZkyg*+7Qg)TAiAPCJWpOBaSTMY@7Mx+e`@j}^u!+8rNI%Ey0*@6+*!P*yNxOliL<>pqn%_a;A2RR0|Z zA^NHnvCBA0S+@173)~}9Tj5GBrNsAK`8nl>6 z>MR>c?0CF4wnyW;X{`}N`pFLxDwyjzkC;#{#*f0*?u57kIV?Ym$VoafeRa(3Tkzs4 z)nE+;EwriD;_W3l>0%01=owQMcLe!8yJ8vz^#7~Rd73L&$0o5KB6EcBEEzGzo^#HD zJ2ym+=Xv8{L=WEArV{Z5hL46WxRjboV z0LVCt;&D88%HkZ{C_Y90CjW^(y#I|Dw`-edcyOCU5A-6FWL+Q*F``A|i%Ww9#A{@Q zuH13kNvH+$b-StOA3inbE5wS#B}uzGX}=CwV(T_!bczH&`DW#ye$hxjf5A|;`kgB6 z;eMPCSL%uPk|+lqfTi7hgzB|PYyN_fVM|iHd=~(4rQxQs$Tu0PhV?}F7i=GOf{iUs z-}(o??H@&O(^W&&8SMZOi6?8|B9dXE_-kDj`vD_#Q{bRPF2e{JQywJ@-ur4`sH&ZB(^cB^^Ne-Jy(%fS)u@g)Cwto&zdl%^iaU?S&^A=C*e z8l!$iT)9+6InP)NMdf+%qb(74Z`R1<1d*d&#l`6F`sS&}$Luodm@mjwsm}u_ql@6v zbTih`kB2R9z5l4(4B!+7UN2Y8ayV5$=M3O_A9!Idejd_;AzetbBK!_TOHw+7!5xxc zyDrR|rNNe{*c_o@zYSdoR8MFP&WQY%&-si$Ho~|nExvKk7@wRNE`829TNbEj@wP(} z0Wsz_vCOHw3~&)|&+h9y8e4G$P_vCNk%WGgJy`dJ>8?H7lHzd+}M&xhNpP9AzI7xdmQLbR=!Wth)E!1=4m_@7IsCHc`nFZm zayWF&ME=oKqH&Nfr^V7`)PC-oBD&~#1kFaf<85B=a7qD^9jQW*U=jAxC(!IR-(|sd z>8kz9*vXk5jYjZ2LT#8g7`WXOJ4d){h&3+`*J^zPvfdUVEoXBI_bI>45#Blw^lIECaU?k({GSF z_(}xNOxK2ODmn5;lL^XO{}^=FbsmR&SeOQza*76`A9XP}@Aie<=Fiq`3hIx1S50e^ z4!9E>NMS@y+r3W!G&1-mcTKSMsf>xYs<nnH_(Ujyp;?1Y=oQx0K1->*gum-R%qT620( zD}ZF%%)Xmyc|UOO7t^yC_1eeASxc%blU+lPsK%L7_pSq6k5kwgg04z0RK0Y}S}0OI zZY-cl3w^Gk`b}9oK$$7LsEii!FQ0S4y)Hft$gbK2pb06a7v^`)InRDE($SSy(PGfg z3_~nWS+i09;GS?sI#pZgX(k8mD%2T}^gBK8nkB`R<8ox;SuK?29r?HW-9o+s^%krR zsOAEdEO$17EGCvhJ%*AwOp5zJWS`RD-bZ;NW*RXh+96?3*b=;aS@=NkXTCR`vbROXkopzZd$gn#}$9~5#86?k<7fu2Us$i4;kJ5 z;bvG^=5gA7=s85w5*dcU#tEvsa84NjwF_zBnAX!1W_-_OR7|T9{Jqtg(mYOxLgOo! z_nc2U>!u_Sd7I2Y`esTJ+1Nn~MT5dyi@nOKD0b5b-PJThm3cQCuf7-cqDbM30P6?C z3gUN4(Ol^<@?PGgz|+1wm}}>)=oY$At0t!`p;m)%mGSosTqmn&zFMm%-pY9f1P?8j z$N{};z^~1#x$|Xr8&8e$v2+}9P21?599Wd8cj^qoqrO`|JiGw zImJN0y6R{K9=^H2q`y8R61cV;@h_iqZHT!|qyI3km1m=!Zsuj?bI#e6mVv*h{h{Mm ztva)kK01}}oiEj1+yzUtKh=yg&;Ox}TmKyuhUem7BYjtO|DedGrr&IXT5=VPxPgp> z!BeDzSnd+9O^LfS(yE!X3g7|<3^ROL<(quSi|zeftrENp*IG%I``s?IN=x9EhMBUL z%F$|3+HYY?#Co3X#29K<4I9R9(`d%S_w^*4btTR@AV}|1KzC3RQ7ln)&ya3Fb&zb9 z!$u){A`&{>Y7rIdii5)a*cl8D`5BH-) zI!U_e4rqQcO;GUsOScmGXqCZdnzBX$k!%(o`T8$i{R|qtKS7R_JdF3R>3KeQh^6$M z*Cn{<7mG<|puNbfCrGE|M8M~>1X1X>5@iapUgP=S7h&5!ef-asJ=CwqtT_HE2xHUC z%yPd=7A?&7m?ent?6SB?v{A?+PE;?XHi>snkqY522GEcvouVk%+T8x-bAI?r--!Tj z!2NJ!jrF)-D{;;_4;G5cJuS!E`4a&<-oaUBHc4NMlCCnf$sU z@yQjwX?t05-Er9vQ0)-*K`1L%HRfCRgRsHyrkQ$*_Ou!Uw|ZUha`!vlF3ARg?NL9+ zQ4U9T)8bS8}_{--3q;m%L0 zYK6S2YaADV1y#2Y--_U_6~S|!n+PoBo#5I8=japS9I7lr#roweR9g zHAi&B=(Pd^f}9&-?S84lKPpa=-12pV&Jt_LI$8#e{^fISiQNTRXtU4}r9TFB?OMp3 z_b-o4+=bVwu3LWumBq}WkAYw4_RP0@=HPDM9K?#*$|M)|NQpG+aIIh&6Mwh>m^$xE zBU;Ry0;@It)Z8p_N^AQOx8b^d60}y9h)r3$AF5*PZ_nFvK{b(b1L`3&6Vo<#pL|X( z-_QRI9qc$5LX&D(0x;(J8Dj#`@Jh3MC$@nQjAg8!`@8fCnd>F8qK9=kjGIEb9Ur+2tKoE5Y=JO zhblf4aLz~U(dVICB9S?pX0e}r6k^@8HQ(J}*CxqS^Nspp82FU&v8kL*^dGz?j1aZ% z>?-f@sFoZ%oB4+$#=f?>vcFRN<@E8IArk(F;2x7GS(Va79=Ge+e%&#fuuJi9YvD_# z65M*NpwxGfEVPkO#7nt1;b1vSNvr-Q$UwpXYntx;_@Io})P)dN+`oLzkJ$F@6KpOi zNCCRJx9EC-=bW=>(5qNo!<=Zn3mz!ds0ElM@A zLc8THst)<73p|KNl!`$b4`BLPcHj8!Vfjo}e?BnL$a*l`k59;miU$P>2dZ_+-kyzVlvLE$$=m2``IzMJj`r7iLiRU6~Y& zPRl`4i|4C`Ym&aby+fne)KjAPv_=rFHBgqUV9|@ES!fI4B)e#w z%3(KnVtmK4Pq8b)Z|r@vn9zpozkJT>(;kvd3nbLaj2nD@HqZV1%$`5=ny7!t7b)%% zS@(Bur(C5?&8%f!c9}uj<ZoUgw z2|-^=j(slZFZ|i3M4Py~knE_hqw!Or7o`I_F_Q)m^k*8O|##L-spM^oN=lpZ6*ZYu}TR3aBz1hE^iY-?0dosg1=HCDcK z{ARTmPfcO0-|X-MM2d)q^7jAoIXA|xszs{*d8RiCfp~0(VLa!Yi;jcwJra;VW80N& zq`#m=0+odBm8bL?Y&Vg2Wxz|=;`rmtsOGH#fFVds1P9;*=6 z_dh~y*;=>we7?aU3g1jk_J`pB!J$%-6%Yg_eqe)0Je{L_b~Bl5I5*8G{fnRi8zM7u zg7;~>zYSJoV13FyOz8sEP47Ql>C)w5>8eC_;=@#)6b^ z^{yYdC~I}+^+f*iT1ylhL+x1bPgankjv`2M2iin4;DmjkqKEYksxglIjRXONtXzhsAA$%{LchDqORqK_=^I@P|qnBv(5NcKzr zGs(B|9m@ZWfefEcMo$Q4Va-zyazNUv>5y~7F8h9c7vYTxObi=n=`xtza|)Hc4hHil zrNFfEG|0thx4{m*oGdKT1;C~|(h;pmx17PuhD=VAxx&d08!5B99nHm7xC43(-ZN)h zaln}n`8iRyd1M+>6=YTTT+QCH=&Jt9=lp|INR1KvWnOF+5F~W(r~Nq#W8^7gQv=U5 zjBngQ$p4h1KhqnqF_lmdz&vB|(3#)$cayuQPsaAihF8Gb1yiT*T)XY*euueQ35kCCLE2BOWU2#jR8|>+Y*%eKH)2bnSqjZe(BKVA z-KtS4t#9%oS-)reGm#dio1Qla)GNYr_aifq|MEGTe80nxWHVwo_Uk%*=;EdLb4JKv z#?vV^`ieIJN*3ukY)r?(we;taT`raCwtSYnm^jt$y-VGl`i;p{{}-z9~1$ zA259%xkp3)m7v^etV~O#_`rT0G&Ee^n{K=suOMU|XrwyqZLX=~pip>tk5_D>Uzye>uQ{sbySCWB ze9mh_&*F#6`YGpzScBJ+y@2QE1MlaRxNrBz$7!udh}TdYOR<``(|!61k8j*Bl7J>G z@Vtw>=Ea+Hrdatl*%%~a>{hVM9A52l#jwIufzO6x&dS*^9kvHFwo9;DkgxiEjbk&- zLho|dzSi}pfntb8X3>B7oKvuGRJL}2QdgazE)YtT?m6e2&z)tw7p!G=t7KUQ%MhvO z#cZTlttp>a^5}`hkRCsl^Uk5;HWNiGtpygIy}%22?cRs9)@f(k-AJ?lm(O`f zGROSBZKWszDMIh}b0_eebB;tc5EqGI)O~lZX>cjGP>tFMIPpNCLa>mP-l-#hPvtqxE~5s^x2kRnxzgL7+MDE^A9>9(H-5y`m)M^ZkjN`E0D@rA+fUY#%Oj z*_Un;%|`qPtkC{oVMzBffdIdFCDbZPsDyaFe(=_l*eA+ZLf3?U;16G|a)y^}s)#&X zlnXuT2q<{dX(aF;F2HsFx7w&w59hVl7T7{v3X^zaiAc5>q)ea2f|RtgPhgZ(ca*-s zDeyj#!SJ%Ggt7>b$4#pHlpdr@84W%2iO`e&Wcd_*fWCBiTjMt81M^2}IW8BcD2V_r zvgmMn5SWLm#$jHo2sq+MB!o&f^CaUKqSVS*0v|HRaY(M50?s+-+#(l{LBt{8{W~MW zh6ha2+4M{n?q2Lnvpt1KPNc9DAvcD1sp=8Xu!kbLY1-I_Z6nJ%@%Xv+28dnS0_Mv3 znME4+6DW(rW`}*Hf3f)Ku%XU zw)+Hwrep2HDwcaZuMIUvl&K2D@zI+b=AoxpALz};JzXU!7iR=A35BU#bRTlZe)&fPqiB8or?bUyf^_;zGxQ{9?Id& zJobS_=ZtaN=-NAGrnwKiJSM-|AaG=bW_{BtHFGPHh90kORK$1|K%?iYH!jCbw{6xd zuYRM6mW0w1%mHe@yth>p){?;#e%7ni}K3+3O z@D_;GOT4uf6j!zZ+DP3H$Ww|oN_y=G71H!DL5PQ_!B(@u28n|#|5MIc=m2JD`lu8+ zr;vinbx+djbp94{?DY#=z>8*Zy2kG+s$R#`Gxa@wG<43neZmJub*~bAUXTBljq}gB z^6yiHIkF`~Y|e%keSRUO_=%+G-(1lg0ZB_QK)GK%9MGux-1WTXzMO5r?It`@YZX%F z$MKpHCSJm$3-W5b&-ZrAMnRB#*%Gw^XS|r+Ae!RuWx%!ISwcQbI=GkE{y)Nt1OSEjCCMXkRxcajYenxPIE%Y!d#r}qe9!mtZP!YLmyfU@@462 zJXHkC|EKO9eS(CgHVCTp);f`bcN~>Fve-QtVwDmWOW#8me2FYU@&1mi z>@3Dy5j|WX2xd<61Oe4V(L?TZn4Wf9oVWUKYRWh{Bf2QR$lI3e?2D!mWdlFj4blU>l6j>qehI`@=SA`H4iY?u9&bgt&R{LIu zq>mpJ-UfW-r4{cQtzyzIJ) zO&|G7JG6Dkf!}<*7;?+^&@Qvun{0m-Z>QvvY{jmwAK_#tz`Y-*P3nY`DP%)6IX(R& zIpfP)gZxWV3>0kH{PJT+=Fk^~=BVL1Dt(sNsEayLFuii@=ApCK_os1< zP0(p63V51Ei++|NZ^Kl7A1>JVAgbE_jy(H2KmWIOP)c+%1^UCExxpEI1k;gy4BKgs zAR_&dq1H94A><{yUCJ3cHwoI}$%yFBb|D+?;+Vh=1e_BslK9x|K7T_mwF=v)0nmNc zJKD?3#~ge6L>WD<7Q8_<4oo~<(z0Ed1d#Uh0^XRGIe4Ac!;we|KlvY*Y16o0>#MJI zswY7T44hpXJbogV<0~%Oxw6o7DmlJ6@lh$2l&$=UpuoKeu&RgJgJ1lPiD(ZD(ze%^ zQQ3-U_k42P>FHH>%?j9?!mRMkz&7HBwP}CDM9AT-M;=2no1B5prO0dGASFr67OU>Sd{M96ym&AbbWs1e!j+i5QT@4jp`WCvHOX< z{*~lF} zK+rXcii%+pE%~Hu)7rIwouCn4fcz!lt2*6!2Gc`S`KJs{nwqbe7tr^(RP9z-&1MMH za1M9=W9?x!$5HLXchuKewD^8G?5_`oEA4Q|M_ukDqdpTh3NXF@hbweoo|L{OVxDQF zcJGI%Q()`}MGBD9&Q5y-f{|jhwG`~9d3Rvrm&VA?UVV=?Qo885abxQt;>jg_5Apna z2_(NJKC$;-bUyB`Shrv(pebnv&i1=6_#QW}(vQ_;A*u&^s3l^bdDHY-%b=(ciptRo z`f@!T#OTW^EVp(VTtruHhGRc%F`#Up2kuxbLj5mb`Ls8}*=a;f{dl~^0$Y@HXgXD* zA$lhl#2LJTJR;NkwE5&KV4S%*K;)vm`0`qtp()fr{Zq)2y^Q*b-Yvs-S`hRQjd70@ z*eA@+dB%kwz*(pv8<(*TO;C$xxEAqBnr8QkhzU@Gxl0h2GwK?om;r%As}MScXSV$>mrd6TM$C9So@_!h z;AQ0G?p{lHj2hdMpvT_bf`Z%%7XTUqCSSzxzp4z1MAn(%x|8m zA!ZL9(NO>teUhWLys!0Z(ZbHln0ue<9piLj5^ue{N-^=j*gMatrnYF`(?V|vJ(SQw z2`zzy4xxu0dhfjk2rcv`pdx}G3aE4u0R>bLL5eg%K&n&`6s04eQUrzPx$owDcw^jm z-g{%5`{{kyV-5a$W`9UFbFV$uZ~bT5XDH{yIOx#Jl>PsfbFT68cJsalpwy=e0Y6N3 z4z{^N&nAa0P8LcymP8Iw+f&b~ z{-9RkDFIHJWbqT9cdhaJMwhSj@(Be^;l_J%yi*37BGWF7iFzQay&;QohUn92jM20M zJCnDc=H&Ztl=rm|2*vvAG5w{!+|ZEN5MsT5t6jjIH#N{-C{Z|$dUuSzRh!<$y7*Om zpzo@CD#(n%mwO|$SvSl}DC0gg)gxXy;^!s|qXj_WK>CMlwTk^!q|i&%4DvNO*HC*4 zkufS&Lh*&S*{w8h3*itJD6RgG3S}bad^YjGJhAnWx%QnaQS6skz#klb3(!5NVwmSf zX~lfS1ggEFQY9(wh{4F+VtacZ&l}ZM$#G?UQDN+n7XPxGuaPn8048lSK?j!!Nsa&P6&7wwqVJlrP~#lhmsW9dgGBdS z^Suu2)#eNRq3R&Kg5~t1VfpPLqtfHq4qJtsyE80BLSUcsTr*kKEFZ1QQi^dHvcB3$ zmb0cbij6qiWA8>Q|7jKVQ}ART3$zCsF;CbAgAI2T6Fy+tr6*B+z7E}|Hp)*1!-)5F z^a28A%KwYYBK&4d2~NjecA1Uj9utVkvobe^-Rv2Xn5X9M<=`_@Gi~ ztw7_`s2RP@`@tk6H^yzDD%PB%<4E%-wn#p(ky+|cb|7Bgc+ki0Oo!u7`wrj@uCky4 zH5!tLiDJ!Vk2AA_DHrEhd=2-`-wD;^<*wX?NbhYj?cX1r!(zu&E8J5SFNWH z(6ey><3!D367K6Pp~Jngwo6I{Z(b?;wo3>k+BwHOWpiM^@27zxWw7^}zni7oS7aIM zvoFIQ6!y(T=;XC@)8l3(%JZvo-Ee54WfqcRL|vXsKtToE@{%K@)410#R?g3h_o_OX zLYOCm-ZxV_AJ~w&)^I5Dnfm3#;6g|E9Ymss5O&NB_I5sIZADa65OgBC-)_Nk`SNRo zQ`$!a&65S-8BZ_$bcV9*PHrTPzCyTa$7Ta)a-9K~tX-@3d_2K7-*vBz8SIt#ze{N`a|@sekigO9%gdazrP>ZOKI8>PsRZ1lC=?UR#SM0@j#I#_h&5`v2AM=+Mb)4 zP@*pV#fA65{g2*d*<83ef`svZr4#c*0qB)1Yd|wwPwpz|FL(p}72G34ZN*!)aZ!TJ z9p7Nt6jx`!z=oCO5h#z~lk>>s$cI7YOG>}<)T)EVN6P_R-hK=J5{BDjHAjV@0gVwI z*h;{Nt@D6Ce|-XCeI8>z!k~rE$UdQnYXY(boK?YM2ru2^vNu6(&p&$QdR>B*iq?fR z=~3&B*EX`Vz8;MI7?Tp1)HCTRy_*vByv&qFPCH((l^Nu+-G2@K!tgxkdZ4tw@|#97 zHU|a%DLpKg8fSv^Xcty(>I*G4(Q`n_wbaB*_<5SB4Rp~nQ|>81h3|l1eyXDlKJ#P) z$EG-YF{%IKWy0RvVVBjdGD!YfLknMH$MtBgdT@3U8woS zYq_gjz>T%ZXxzn-ENFadaEmZ2X^hor{#UTGz6lsvMN$ptufe(5v)w;@c`HzGtvRlf?7plN0L<`GY?du`@r@s%cS`v+8O}TN@y}=- z8I^?Xmz=sfC02=FWZfOz`%2Jt^zs&#vAgJIPu{YZHD{Y-Y(ofmK`T@Qrdex1eUye?%v5KP04NE2;2ptdp?7&uf%3~#8lD)4hCkRfd^s1NP7 zEiL^>hnKmLI69q_=k(|*_75R8bt}NHtu2l!C#?kLw{EmUHf5soZUxk32ycTP_LmZI z?fLB0#jot@I!Q6_n2TcH{x-(6sr)3z4H-*KE3Crlyfu9oWzm{R(LnDv#$v+hFmZju zORqRNQ=4To2Ui)xCQsEaI`z5Kz^mfxA(T8Hl{eH2HFZrE!;GA4rjsKvZQY4Uot=VN{1g1NL>aTAA55&MqA`{OnMNN=Ktuh*S5ZLcjZX3mCeVCUV77K)!%eR`AP*0IN?G z!aA3qCd0)9Ih-R;EQ4n|VZqtv0*FQXg_wmnNwt5jKyzm2aJBi9hqEg z2WC;Z@hZk>=I13Qne7QDoy*(CtDvuV2?`S9U&S?o4Z9R}dLy}%)8Rt&ZW0U(&sme% ziZE@k!?GU~eA41Py%&jL*HvVplw;EPfKL_@AJ&t>+D+k+O{>*mzQp zNUrn+hPlm{tbADCWyb3H6W(r+eo5^W zo<|_1D0AGGlgK{sD15j|Uhq~?&V5ordH<0!Wb($b0o92l<%xYHZMt$LX7ndDcP&6z zx4TD_idwDAz`7QS>#P$9`zOvho;-~9x=azThiS9e^R0Fek#pvFG#|;T7X?#&O4 zuZa7E1rh3DzQW0Ql){|~Q!EDerN|tPzY4IdP7<(vjW&V7IBDvi0H~JHsJnH%12oQa zH!2v-K*(wP>ZTsEBi{X~7XCmXl+M`5koow8+Z2*V#;{I7=7uQv7RZqo%#$zl5iu?~ z8#s_}89Zo3kmgUVQCSmOHo&91{2r;e8r!iIlDIEsNr<3dYECQK;f+;VNLIqvEZ$|Y z;Z-@=K;m!d3>TWgLHf_TB>UxPD1JN<*Av(|2&~@;=CEzh2t|i8)K1_!Q@PY9c%BV3B^p8me(aYCpPsu-l%m>dHtHpv!;P-D>8S|O5zm01gRF>8g^hQ{SYy0 zA1kF*wTbbwU~`MSv&}OWv>Ry4S3ohaV+wVtxG5g~xiZQf+b4b6UJ6JCo+;FkkIP!F z2s*J@+A8zjdcrJO#(cGWoew*id2jvz=szZm2mP{oDXf zR0|95-id_BlJWrB%48`}^;+5zH`#S^%dsN!ZZa@q$urV#JI)-O!-g2kVt)5Us%0J_ zIGK*Ymkb3RB?aY6&=}tLVOP93W_}5^cg=b}rf<~}{p@SGAo{^x|BVhMXQ(O-b(T`} zw`pPUIaKz?J_&3H8KRt z_}oT5xO|#;Mf@h8S;$q(rICH1=y6wi?}!OAeRB^^FWP9ippq+UfEPM{`hdUUVs7jW zHuo!p%&r{LHP5m@3 qZeff{qA!B)|!D}`VDq~tj`*9GcGIYpE&1WyTg& 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%0AA@h*9zqE$s-MqhhwmT?-4XTtQ0i7VmbB?DMH1w z3qBYYQC=0|eVwM=c${EGxxB+zb@Ir@#`mVoK3W**ulgZ~Jkm!ZBX7ac?e}fqcvqE! z-C?oWfvySJZy|15*`=yzKOhDNt13%uqn{1eH3G_fDeJX&X4B`nNVcc^q9Kd6OPrSymw`Lk$`Z$nxPB`4NWB+%n;i@Bfi#7Q+8lPzsdi900I)IEkF+_*s1#emUvTV&+)D|9^^ezJkQi zHakX}3P@;62C-7opX)ip2RxZR^xTW%OEGnFy!ge->4uY)LC!65vtc`6yFH2Bw!PI# z_u4*b^cuwd_!h{rWI`vDCCyH71xNJkHj$91M~kzI9700YLInsJx&sCek*PAH4{{>b z<;6oi!n%P8>%r)a02C+1XDealut9eU3tA0)e13#zuDTgt`h4V~WS}G4?QJ#+U;3y7 z+;d{JWv3k1SQbB$_A^Wh;ObjRP}a?xZzQh1`sk>N&52vOa$QmDjhF%<2@oa=ZlWv! zzJ*sk<4q7w+LT7$t0FmO;x)d^m0M3`g;=au9BH`>!hAY3`yo``FrDP+w#VH3;vQ5Z6QhdcT`CHk#xm4TKHE9iQTX_WfDoY2K zhtnoV3l_;f1V*dI;WSCU(pj{(djP?W_CJGSQ)#uLQ+KT_pEdE=@}}$EYdz-L_RrUh zkJ)C@MNENjXiid6M3*X$(v8_h_q{;YF0ZQIqvR8#FRoV4ar&)fbNQKHPdnN<_3Lwe z2_v_}cjCfM|CVzO8qMV|_hitgenF#uozfe1&N+h@h?FNhDbSgwEoNiYa)dXa*KjO#x2X5Nsf3qMrcYCM9;w->3Y|0C_cCJ08$yUN)}z7 z8fQ>}hge(_@tCjTMBQ*Z)w@$8f>QUm9#igi-GX7{I&pq8T$*b^L?v4JltlUZHI_D3 z(YO3IS8Pk!u)sRCr}3p^MFzV~4x>fo+b~+=5sq6Lzii3BhLbMpYT89er)dqlJL6l< zsKxK45ZyrSD8Y}8t03)OEz+rVg*H*MoyNv*SX5D{*<9a&lE#DifonmLB~WoP1?I4T z7uTWLGwGXR)Xnq)!`_tkyUW_BNE~lJb6cU@7t_k^6MUj59oA!9=h#%8Ec3#KBq^4b zi?xI7;Bmr>5NWcnN*BfheUxrov;U^VY$%_oZy0P@CzK(&B!6Q+!)Iiy3*N|nKjIeN zmz{p2DRw-f!Po~;M$m3~%woGCN@~qbQI>ep9r6~0Osq!UGPxKMWbRY&)twjINgw1e&_geSfnU?kZ4swhxa6kL*R8Y8mB$V23?UPsi(Bcq zJvSF!f5sD`DdAMd%#$Sx+?{oj4RS70mhPkTToQ?fiPsW29oHj$bx9ny!#wLTKnf?P zpbnMBJ19#auh~b!N502C?1#JTQgk7{=u^}2U-}?sig{@3u;l_vb%n=1To!atGD3hDJQn*_up#dGJcZ8yzcRCGnR z*z$Q%E3rUYE%z+6ecN51O6gm@Lht*;*~)6Fk`>y#RF6YY_bgGmAE)#DTh3WGfsK3R z4V2?y$b9_gv*d(x&ROGG51nj9mE4yZPc=YTrKrE{iBfKN4V^(Ar`#>8Lj*pf-6Shl z(y~6SSWZ(&I0EAu!4AJbDy?ti(Sv0c3j>mRnTsZa97#eWQdLoPbX z!G`*4S2Bkdvj{9Z8*A7n6N_f8SMGlfjd?qCZMk%UIwO7PloYcm zcm-a*fbu>FXER#fYA0CBayqq0rODSfA8Ie$dKngP6sY0G{WBr1$Qu0RwKJggIED^O ztr|l9`Pi#P$WB375e<r<-cT=%;yR~`BjQbkv7 zJ*8^kdL{hg_bzehz$ko}kxM|-a8}<{(~jmN7Jvt291`8!(iLC)iOw}kU-ik_dr8c* zVS~095?}+%jQl4HHbS?o`+ZgO4I{j?-H6Zha}8{i=>w!3HNYBImu32|$-qY=o80cD zJYn{~5=sC1!BtPZ09x+fa?bB?$x>tNEwC$>c&%?R|JFO_oNJjUNEKQ-VI;p0Vz!e{ z^a>e+C#!EaG+5&;keR9go{9V_2)DPDT6j;-jJPey`vFSneZP)b!;R73&-ctD5chB_ zSaK!m&tg3ektXLbR(k7VQfizde-HtSJ$S?hG0r;uQ_i|ksz-v~;lbMzr3T9YxyY_= zqcGQ3PHg--NV5Cf&WlnZj{IcCGWeK$gSAOc>&YPlk3=K~k$rj*it1%HY&Euw*i;FX zj5@vVOw?W#fYI~BnJB&r%3JZp#9L-UFU_*?*56X+qQYczO;%}o3hpxU-&TESmE|~3 z6(OrGi8vjmGR=X;Ash(uj+rw4Psd-Nl`Z^57naZDa(iE!F9Z*Wdek&gquN` zlx&s_`p>ED#NXAClwVItlH9vjRRK~xrjuu>5*tUDz|%P|&ElAO)UP5umsWO;X9HQZ z7*`(~?%#6Gkke&@PPr*%pQ;@Vi7!qj=bZEXk#|}qkx7C5Y9y@G3<7-hJkQNm;z-xu=asSW zn3$n-KZbe>x|#6ty@S|Z{|mbA!F=FH=Hv+AtzN=Vl%#UKWPnbAsAe>^giu0e!jbG9 zSFXsR&MR^|mi-D$wNw%4+-zo#U-S&_Rql9(VJe&X)~@Z=JyROTwdX5 zk*TJX460}@Jqe}v-t%#%n{D#GoUX+AcK6u51Z;#_MJuUq93?OvV}ezPos-U9;PUdo z47;s%%n{6-TgX>CEV;h%yvD2EvX1~O_ArKoy(1O#zIUt3PH?~u2#6O`cOzSDmjl$& zGPFfhIGN?9FGIBJLL41XMLdJmp0ef68r+=ry)v5L7`370hweA|Ic*+#ZFyq%$|J+- zm!yYVZ!=!K7wn_c;Ain~Ip_TRI@iS{BZ|W1r<9ICJ29F=?6@QN;P zdO3iD?hDTfwd~i=sH)fw&GEu6!AeT1vVn(6Ds;Bw4ryiSTE*e&;Wxv34DW3Y39ect zJNl-1da8Yan7oen20qPvA@P9JZITJN%rKWc}PQRD+};sA^7ydwM1KVHitd#I-*MUg6yT|+0=v{VAv1Bm_&^3 zX1J`=Tlb&Q%JL;#wi<6zY9SrTv0@~*UDD!bBb#7~7^FHQaJ z^B}*{0~HLgTA?z5KiRv?qad*ISwWBD+<-?hYZ7Vk%C=%@7BT|*Ei4xniERItbM|?C zN1MXxrE_^(I#_^eGUl9f=0In7eeXa4g!h7VFW8wzk{AmOyi_`jB#6 z<(Y4samsvuAc{Qkcs!>Qdq09z>ab0;u2$JzOWD938g(}|C6L9K-~|iRGJ_dn&{mRN zQ_a?MFG!j}KhoqEetu-X-{x+)KaEnUyZ_#M!wvu$Y7v1YOqcD4)P- zS)uj!MgZFR(Q=4eSrs+|1pyl0$iGD0X&aG?qainDok5J5L#bY-F(#as2L{ROo)(DEAX!-cE$58e+y;MO z@-_CbI`*!hTcbM9*~@nK;@!1{6(U1d9iqm5#&(B9lNf*5>PhpT$;R3CYxcTdR!d>4 zrjRT~I-xFu>>Pg}geLS`7zcY?gHFew81GLJ^ta!=ML&K^AwUd z3LI=FI<1pG^W``(4CeP(;6VFDnarmcMm)P6AaTciB!PQ#iO;;@Q29bFnY3jtk5kY? zXXhlpeN-oxykKo8&}5(Eoq2Nx83J~~!}?|UXQFXxI;~R9QefBhINBQFXo~xfGh;wJ z_6i(YD&(M97M_30IS)%^$cj^%iuBj?OEpT2aGZ0_?9rFO-(RkhjS{5gpQPjp6ST@; z^XazXI%1VP&=5)-fL7c6$C8=QUAPz?^3~V&1(YP4eVrs?$jj%{2dUtq_4~;YK~ClI z!70ugti{aYyADB{{$kcKes0MBjHTD8xz>nT`4^j?qly8hR+tgEeR_m8NV#aw{9;*} z?J_;Rq}iX`QU0MX>kl47h!_bi1@G}l!wh<@?TA|pe1b7%eiK#VQp+X|0SDs)?R>^aiP@RU$~$=y3`6K^ENWcV=?5d{LW&yuUT*c{#kRU z;k)lHVUS{WcHyLS3GIA1xfJaNyHgJz8=HI)ebaUM@Rp=nS9VroW|xsXv6Svcirhyi z#J}a7^QSOq5~c{jz>{v&?D&Xy&cb|BfS6DO>*-u+FcrDPe}i~xW*(@mr6mJCNztA2 z+LH@?Y)mjoy-c=6rp-Yq$AP8NW%RjIaD>a|UUL}UPl4Ze*AxHgU!*#WsE7O>E)9D9 zDMt6w%DBh-7fGS+il1njH=pwc+hk&W`Y-s*1~o8$G4ug(MmkxJDSst|Z2IvwC98pS5t2)1 z)|`jPfk(m(6Q_z}P-%P@O|^wZlmai=03$W8J4G5p)HYCQN^=9$VAnfNyw~Ts#aZhY zble=!V!s(0&Gs+&`weKdcy>OCN3<}J>_`FDlp=|lkT=T+iAH@M#v~+{GfPv0<_7C6 zIF;cC{=k%8RY%4p5xHk{5Qz{A*uUkRRg&LeZ(k~p;|@$^PkZqOe$F}DJDG^plJQZu z<5{JBTDtkZd}77Dw7%^^7bhH3tD&aMuoI!$Vya3@1#PzkdRK;e#*9Q*z>*np7pon+ zQ?l$=ZJps4Sg)~uD2-ru$eHu@Rd3{J8>E)urJ>>XUGo6`Th2MZrYzy*s43QA{M7Ir z`;P2+9$0CAdf|L<29MLa%*FF=YXp zdKAsE5^j23GOn>u60+kRxBj=BbGpw5*!m{DT!9O>8wZ8ie>vwX0y(DNL$obxug-ye z7>W95Rukw=EyaYZkNd5j>kIq*Th95p>}5oo{WVE7BXNd+qs`#|T{&mEq`RVYx|HR3!&FbghWJuDnH?1Qc#gKkUC@jDEYJ48QYP1e_gHeSt z$>F8!k>ua%)q#NnP%_zpdMgfumB#`?xq3b(;3Y@PWpAYj{ zFw6kXcPvk}w%~$l?WF;k#M+oL%@9^f zl&62d^qg}>*uZ@R@2>dIk$*=+c-_2==szp7*DuhGU#?(uuRUT}IK0bm9{4Ws{`4VC zz*Ly#!UJQ+uM#+MRB>T=FXbbB>ZK=&FxMGOV9>YVF^*Egz&ByZ{1kqGT$GJ>Nu@3} z=OkI6lN9FlHMP}ozj+j3O}EI}LKa2Sn#XSW*RpdPQVXtLlZ>b&>ixA-pc`?2Ev#We z^{>6EK!yKnk2_T5{#th}f4{%>@$(XqzqTfJ)ad+K{r}Z-=6SlmNsOe~$1SfMhxz3a+}$FR6yGS@`ue(zi#7yFNy`BPfyQ;3 z@h)p7P#Qu&w01@%yO2Ahe3N{L#mu7y4ZImd_2_1phDG+in79ixlHp1ugm?W>f)f2_ zfm+7}lxdU?lCXH=IYN;#{+(=tBj z-tpK>Z7}x+;HF`)iouKkb4dysxtPf;O4QnMf5N*bQJDbI!i0Uoz7)VQ$2^FI!VFRg zUn^v&B7XG|JS5f>p1itlA%rxFtr7zVyrEW3y0&k4@tCvG!{b&zW!**#9mFogLo)B9m z-j8g64}$ldrqg&}8>C3&|7m*8JZ+_BgvmL$bA1hC%tVB9&b1cg`hzk*M!XII6oRMM zuo?(DgpftMd@7EoY4VVz)laoKXBYpvjq`afW-F?5QnDTD@W_lJKC3}vvOh=tZ(AyO zK|HZ!)y#>r)%i{{7x%f(r7j9GcL=D2^N$qD$9JfC(nZ%We{k@UI^Wy<#uX=|RX16h zgNkV7pSX$sz209@b9of~MdI9_G63+f!GvBR-IO%su;O+77sNLHfcQT}>DRqOQ5I$b zy9*FGChtUzOhmf_A3dd7pkpJQgGqtdddfG)&5wn8ivRI@%Pa<heK6dS`R@h~>h{xy0!f?N_z{Vp?ELxYdigZLc=rltUhdB&=i zZ2qDsH295)_eL3AVTPEWDfv@2R4rU#bBl*gIBr$EDU*pU-nq#@J-Wjz5YSI8hJA_> zSuJ5v@BHK~@EN5}O5u}Mv?}1x<%i<4-i3={8zogc<{E*SrTXkY8A=ExvSb$XUu6}c zJ$EqnhvwAUTjbPT7A+23rRo~zoHIH@QB%)>&Pn#YH6Q_QhGIVeIb*bW6Re%+K1C_#`#!kd9(MW5j43<)>Cw zEk6gmmZ)>m=D*lE1DG70m893Z28H)u5R3N#dL67~_>|6Y89rf6WfEhz4E=O59RSA2 zvksq)ip(*6z{D2d15ZXSL|vE?f}B>zlPlhL4{*5FXg!A=k^lC9AmOT66&~Mm>@RyI z%72(l&?W1#F5P-?HW*|lAtXCuBo?5b+!~ zsPf^SpAg%+3>j6{bAR-}lBLeskzKaSHymBVF?g;V#>!&ms#w0Hs`k*7j{sp{`X{L;YTT zp>6+-%*ZP!DpKety9}M>p3idyEG>t`ZH5C5hCmgs7`F8S0aNECYAntDIw8JGcPwmQ zK?LDV-(=+vI}Jr6KSn`n%O$@AODQf`OS!*GwJ?xowKo+>?8Tgl<@mow;rz+E_srpY zHP9lww~5q5n_VxjVAO69gM|z{M~*0eMn1vwNTZgd1njZUa@&3Rk;*tQ+Mu14K3?X) z3oLkj({Mk`5~Qg8CeSX>&+?gXfjP|whp;`b0{QE80eb8*VPJZYkOHg}3>6fPuFu_@qgEI_Q6=k*rY9LfXcd<@L}yp_02O>8cCS`+7wQ3Tu0e^!qQJmMzMo? zyUr)r_nRE4|q z1SgTb|Gb2}82wa~^K~-4^qE|u9TgXQbdc=`slXM zXE-H0xX9RZxuijj`=vf;C40bXdi%1DfMOPLJ>S(GjVd5MH2)^_)FhW)8Ii!0dpzM} z=Nw1Foy4Y+Fk{RevrN=H)$~He^zG`!(=3GD*Qr-)m6o)NOwbdVuFe2&-};>JX<<;5 zBXyka2R2KfKA}&2;WyN)R9qhhNjCJdw{bD3dvP!BXzLTa0?*5u2P!6;)*d z4P6|Vd2P>R5Okkp)A$q>@FRiYOiV)f9%e%7`&<2lC?gs-VN;N5s_ZlG|I_rGow~wI z84H79p>xAJru$ShJa#_j4SSv-VrEd#e(QqDtLQ_iM7aZ*yC`8NgU~ki^L_IK$viOP zGOznhw|AmH1&dTS^rUEi>wJ)r1d7Vy4t@%rbIvmJF*FVypN)sa`DNsjG8NnN9w~eK z|0!~kCgUb!Pwq5v-AKtGz?H>Rz#MUN@Ps28YZ;0#iXpt9ZHlVC)5Xqmw!=LAb4apf z3rR;Q1@P|rqNmzOI#AJ!8L}m3=F&M|?>ckO)E4RqA@%HxFxgiJIO@oXn7j6XaLffR zRc54z`3EOcznWnRS!fOh-;vCu+A%=D%w0Lfh|?yJIdNKXpU3-i(Umr{fA*Mx_GJkl z-%Y!yOD|ae+8PXvyDf~W9MY$D9k4QfG@7EWofJYVC4>DhA8q)`#rNtXOrnq1SqMjM z98QJ&8!WPzOytUJb8zESC@}xqf=1>@YK-tazvsYBA)Ry1nJeQvw6W&1h}Wm$gpO*w z7j5CGf@Hv8q=W@FwCLryY*`LYl3wnUtQD(}P9gfE=&uk#WO23dmO=c|w+VFdai-LM-Bm+LMkseW-CX==0GH+B@5EwnqP1*JX)o zfxnKBVW^c1qYi!zq%a}I^sbTw(`MhQGow7FM;(C`ucTL)GwC+ zy?eZ5r`<^w2)rixrh97qdPRVbd@_wD|JN4dwv2k77d#)7ZlJ4WRHk2|%PdPpUVCN> zf2?yffWOV>W4(i<`9(INZDO!T$ycx|t*p5fV8VJ?q*hPXhs6<0RG-{Jml?K_j~Zjh zzF*Wq*`;9J&*%03S3PH3xt=Gjd?Q(-bByK>w?aYuL1(N$wgA`Uf;(W82OGbQVAqALG(GEG?spTIZkoogV8XW#F_TDq7si=MXrG?&m3!#J(O6Vo@-a{ZjAoNbC zA=Ch&3W6XVM7k6O1W_r{yC6sr5CIECk!D3fsp`==|2*H$ymQW+56?UEW@gVlbFG!k zWM}7IYp?sauSMb{YV?QncieK&Gn2CG7Gd|*=J?ynDz%&reuPoHZYC?t({gkhxyrF& z`c9^`GvD%OH8t(*-QqJuVKM`RuSQo3J-ycC4%?EZd zT_#cDykFEHJUgoU4G7rg=?ZlNg|)(pZyAUJ_rpX!{C#B4!l;i*^%(9B?}hmFNd|QVD1*SE!PMVyNaeb+w=TR|cL}8f88=9l)|6$30y(+EV5rRyqna zkDHO}lC;7~O0ty*V@t69PnbHZyr(5Lr12=uYpT9~-*_WFi!yyw8FXNQOli}$dl(f>;Kv$x{lxpR%} zr*&h%s6d+svA-2fr1sTKDOgiMw$afhX4URuh8t@X#dYT;Dn+s3c|U8X_T13h$5U=i2W_)GgU2t1d0l#GPPt$GG?M4$B2@= z5E)gk-Yj4jY2dXc>Y!)>`?sAGr|{fPYoKYn5K(ugspJ*td|=i|$K=0lBu7frC342a zsGP6c(cSrC;S=N>Mbr=3m}x(!YWKcG|6&@awi>_gu!6dz zLq^Pq|8U~r99X@DW}+#HO;?HrC=Q|`q_(8uhd<&R$m<%NzGOvuhfsIAf9pH({|Zs( zLq@6z(|IN#uukcJ?^VobRp9*b65mDaxmLXCEt+ye46naej-O|YDKITyxgLRVrQ;)` zO50|^CO;ie`v9nR-TnC;rAe`E=sqnGX_6jt{}`PjB`xw)6$D-D>?3^ZaWmA@trzxZq84uLeY1Q1-Da=ZWH5>&?>} ztXkbXp8LyNo{cC)tIRhB($VwZt53XH!qrbl4a~o{L{o@AZj`!lS0ukx9oflfs2wo-RsrjV8v9pfV zPe>EOX|IHwRKOKX*WHWA&x|uWkQ~SRvCTx>RA$hTUmjHP9&&a~EoJ6GmB~hV>&JR9 zR!JiQow@|$1fgmvKP>|ig(UIPRKtuHy??jITgs7)5FAjZ)JZja_A`aj9;4#bMwS%! zyxCp%>HA{2eJ(QJrQu%^a4Ld;gA%!V`OAE(d1?+1in<^4Y^ifm{P{N&G`!J(KKKK% z@AE0xm^5hvyNAfg?GQG1>`cB##oB(n-%zZ9<*cX*EcZJqTYp?&V6==ukEKBbZ<9cZ zpBEOq_Q6Xxh@K+2N9`$iA zI&fgTnkpIn@sTz9z}5kj$JxgsaW>_K$r%zQAND5Cwu8moP1@Gn+mu6fQMK8g*8cp~?S9UgVRnS0muSDQ$p&u2lsZ8~&Uu7oj&4!%hx{nGj^eSBf#BMoNGzHkqTxyL zO+SRb?Of641t zw~S=3+2hXXGxn?g(yt|#TFP=K0V67yn+1h|H=P&S+l5zqSrtY?pA#NF6ynf+oWcF` zRX%0m1V3Navs`E9hAzn#m3^0LoE+_hGBc;P+7-dBer?D$H$IH}mjxQXx6YA?ct@ti z%&hVDfruBPTO7{?_q1x2$rI@BcUH{J5!K!~c2NkJD-GaXKOsq#^v2uufJH(^W^MIu%*B4{(lBE&TcUnY6!SjU8H#a%u>ZIFIrou5 ztrp&>h#-J+$`7B>m=N#J@(lU#zvnfeaO)V)rN$(Vv_EqvNK7kf}pJ_`#%3T zf63}aI(AN!nNM0w%sogUF2s^vLG&fT@ik9%Vh~@a-EIW!--5LxG?rPuN;+`m;kF?PlAj+6g>XEJ5IkE*hQ0Wc z?cwtBe)NC4pEE6eI!$1Em4(~LnHm)26;I@x4<`HRcU@vMqTW~}@V`p(P;B=lP#lZW z*7AsAzdTl8l0B$|c8il3GV*LCEX|a{UV8?j8Vk!Umfv~v3eMW2q60#K5(Wy;NSfOw zT0;^hu@*@P_+53b<#H-_`B4{YW*1JKY`CD~-@WO=#a4+8VWDdQmsM$!W3!#jCYJvWBNx61VDvk(vysZSo@pI=qPIJ>OAG z*jx|NR6gH{BHbzmcTlJaYr=vLD4K-VqUQN8Bru$(Tr^>ABTfoOU3!|8^#Sy|sx{hi zYf$=M7WoOqV#Z`|KTxRhSaKjDdS*Qn2L#xbF;-?tg@Vzux3lCNi_GzzmTa*K*3D8j zjmLOT6*Gz!CMvs&$&TQbCtSYht6_Nj^i6hrf@EYO`%1`vyPvaJUq{T<6+`JBWhw6u zyb53<=iGpka~+x?=-tLi=q*JGF`zX>0~i6htOM$dq49F~#H9cmz1U~0^beSMRMO%} zm7Ap&Be^_E9j*Z&j$P!vY-LwX;M(uc*yCRD03LBmd;dJjQ~+1P*h31gX^LpBnO8LF z$aEBa^=s33!Ea>uQ|UBKlft>@mmHJWg1J&#ilKViLsnStrgFenKj6;$Wp>#W5=IA8 z3{uVZcBF3cs(g%YLj9 z@QbO(9(tNEvkWJTD9!cs1JFf55i2x5jr^3v;!C<(j?+ z2A=g(+%R3&pI)6}&^j|Fd?{%H=rc|FGUQk~UB8#)`_`PAB5m)3em=~QO=EbLe2#8M zvjZ@wCM43ubvS=1E1+-&qfw(pP1=aq7cA_Bc(z4({*v|-=HWZnxxQBj>T_#!eZ%nz z_}}j5JgU_V{2aA_EctxR0?ohcL0tC~4N*gPxL={YqqV`HXb%8JP^Yo{iTX*6KTY5- z-X0R~nmQza)?K7J?-S62ZRbA8xUMk6tLjGWIlCl(G@=6YSP^Q#>nQK27Lc$#w*t3{ z{E^ha*as_)SVxfzOr~PVhb`xf9``dF`x+PZY z(K9OcZx#aezty1gNsB`94@>dindT(w8n8?bUkryyEMUg!XP$T}J_1uBcUOi&=fL zYZzq0dGvVf(l-`qLqMs^k_bYWJBvp4Hs5vj9>A~oiv@wdNT#z#y?{_xtxe_sZ$4HQM{dGqrQ|YUM0+W{{OmaCfE|II?T(xrY zuhkIC2PIX6bzNnpf+rsl^k@{-f4iTve&R$x@{9{Xe!)u+;_}Fp$T^R!Epkq5Wy#Lo zfn#kMe#qt>8T*i^@c>W1A5t}-)PQfs53Yf_SBpAOlMZBargS#M=Uy2K#GQt%Wu5yOwmiV!i= zP`(-17uWH3hC1&fJy{#KT)2qr$t@prjX@Kq3qC zSnn6ek#HdhBF zu3v3x{PJ!{8shTX@boj}b+>4AmVv6aLfHQ4#N%JPFv>-aq!7)KUMk7Pxi1z&Y$JY- zGkKQ&Vh`3*e3+5 zNAh#R-eINI_g}Ly#QBL_T`k6-PJ&dm`jwXe#x#^*`_TWj)V5?{lE3kg>uSQ&x(mkb z(r#wr_z^|(j5-WE3On+?6X4OKK}l87#%fv3%Gx+J=IvY82NV1sE+8OjDWZGO(9Ta= z$SQk{Dc&&C!H~+g*meI$C=X^u#qqglob^G#04d5%T0!OI0}K6oo2)R1e9x-RI5tQx!jpq5Rx}j$sqsO;|WT?E?YFvoW zOM=h$cd!AYRf>n5?|6xvbCGtuq7B9&&|fb_aLs>0%KGav1FEq~reg#QW<^jjjsckc zNPoE_wY_DckC?}Mx;DN7&t(SCCnG%`AlAb9c0TE6nFlc^IsGl-{jdpf#@z|kMRGC z@piSKe^CsWD*P`l?s$p*i-a}@ylgU*pkT`H{wAVU zG9qHyg(m^>A&1gTv&I8nDIj$i{xbaW;w-$fOV>m`-xBVA6rp45&PMq*iVkF;FDsTs zDaOn*No7|a(QBZUl$BV!Xc#p(633gWblY>*G&@ckI47`p*c{t&jZy6^-A8h0Y#NF?m)#Y}#v8;r}P#BNNg<-Xx1HIEuxRT<|5L7L)~iE(VZEzA7&IX|Yk-y~Gq?BC8qx zKB5u*%%Iczs%)Y(hNT;69$XwRD+1LvqHpl-bH(VD{|Yx{v+7m-W@@HTRy?X19$)2K zwp0%FMnQoj=0*PZnbX056=(Cb}HLDFcmTy82>CKDR~c`d&C7zd$%s9ehPQ zRi<5E4Bqj!?klw6uGNNu-oyjYgjs?u$wn}P_q|v%kUF~T7g%lOE=rE@Nt&+ZSDCp& znvb(s;sHf%OikdFzAj7s%4cJRRvE5cUUN+BM2y+a&=n5^SOHbZ5hd#rP0Ly2I177A zfr6Di*`inkZpAvjsRx%$M?v%|7nlA z;u3h$>=oWT(;_7aER-eY+|JQ?i4^1`ZYEy+#5Czkd+!DpNq;qs|8UN0J(nRn!}VM53OztKb)@nB zUJh}iZYiQ6FCq_6hIx{GtL!(OJDw4xoVusWIDny(zBY|W(esxX>JyF|HRqQ9^JM_> z$mas%n>?xG{>T#>dw0wC_)$_gTXz$SV!aqT&|8_gAbpxwbL^eh<1JO!O`APB6CU^Q zM5zP8>g2|RTr?t>Du5PXK#*o2a?UMNTV!a~G+YEtn}a3rzG6!#&{xGh!nMm{o8|L# zBl`hIMS^Jh9&3=ay*89|)`3%XMY+vS0vP9$W2CH6#~pkn7axEe6A)l+4LJVrF#%Yh zq3PT^Yf!TO*+pluLAyvJ*d#ZmB%X#u-A`bD#0Zk1frnAl$*U%L!3NX5$2GQ0!Ozt)}U9-_5B-stsx9ss|hm9T%CW2Jdm+oJu3 zM-y#d;OXUFWJCQNngY4VYAFPAw;Ek*M?GB z4!>-|%6yWL{58yEZa`a2;tk$bvz1+ReOy?w?$D4cfpH+-YBQQexIa|yQ^f%nO?#Mu z?=f7ZsY=#p@bLo;rRHn0J~xKrF7G9BJ`c^5AyEu)pO-ok+jB7jE}l<1o0A*)9AkH6 z+IljnEfjhUmZ-Pf-Mz1ijZlwBf|WJHKlyM-<%X=Yz}Khr<tvXyS%mlxrkm>SuNSc!uH>mKe;(9C-(_Rl zQF{}{DLXCvqM(2;`63(DKgea*>C43N?4rX~Bca0*dt+KY%$<#T*X9ms_xZZ)v#A0k z1S{(mx!@R0%oQ%6V=!@yd!$z=lW5zG`C&FH5ctu^r}I&-G5?JdYMU5rX?up29AW1}o96YT`3ghtGF zDw21P<4)|jcrL@X{9WcuZ0U+`$`9Plm-Fw+a(&2>%7M4MGz?_erR-p_bzw2SFRLbT zHPTRNBF<9M+;fJi5SN&uA|Us+S(Sz4SK^gNbE0qBJpz=Wx3PRn^Zshswy2z+NV~wP z4fr84MnTcsmE7xrnaeTzfztbHYQVdKWe%!e{#J{M#qzP^b-_S6IQTk?D}POL;0RUi87+&m1Li97P${*6FCdmQobBz~ntj`Df%2gGzaq~nX zqm0If`T44r`jOq(U_aC>-PFU`VyrJAix1h*{3P@TU z+h~TQ8zlPOrPlUBRjxfS32?C|!^=;}+5AGw?QWYeHuUpmwcBSRw6kw*82lIMdiA>JQ3m_K^XDA9IF?7~G z0c;yO{KwB(;GJI319e@93u6z78|Sp<@t6CUVv-jBC0tE3r5Zng$T{OOxj5JodKeO( z2&3!eI>Ek+EnE6S8#M+NUhrV~ctL8K79~ z5>}tH&WC$s=GjZeZa7YD!UJE>8pLNlt<|YddZ3n`>mErQ@7!4=!FT2ESmv|>jS=QB z3iJLk4U2VCXNwO(L2P%GSrzSBoVB;ie z4x7etG&xVF4DcRP9&I{Eo*r8gH9>tRmm8Tc!q>j>g?DK8NQQpcp=Focyv0`0bWv6T^12yDn2&gV`S--U|(dok-I#8SdXdzYS zgbZ=JglpqFfk5d-!yCiz;DIvL@qO%s#7d_d0X#ZeB!)kr8e#{EOcRiwOj?yCCS6ex z9$NZ`R0U@^zYeO`!7O`U6l*r14k`?H@VU8Kah@6Trd#ewhG)i-GHEPdBw`;Sw@+XZICswilVgDBNjgH@>XM@?!k6%ro7ggRU34;o@7j zMK<)vl8Lsr$G;Ub#W1O@sImFnNSAm&`12MC$mE7BDcKOj=idD*URg!_p}~v2GEJOH z_FoFWkQ4LtDJeSUT=F=i(zh2klzXaUA~Hn&(5@2Scn1<%vcsiS#=AsTFUYd&dN z$bE(fXfLYyDQ@H6w$#d}2sav>^L3JY@TB3Mm1;$Y2Y9k-l#6jh8lYrij-UJU=e4?C ze{#ti&>(>{zX|7ld9^s^f|8oH<@Xl+topYG+hmQ)r@KiW#ie(x!(3lV^)F(5zU`1u z3xz6Ero_Kd_O66z?vnb%hDc0s1!pEnGQ(PomoLA$DuXD?T?&1r;-J&E&4s2wsA zzxr!XeR1zq><~UOAV>fceztBwHdkDL$|rAdX_=%%eF(E+q)vK@%Q@DN1}+htyRZ02 z$X`M+49~e7(oIW@zeM{wWma>U^l)t<7_#wHx%n$k{_Bx4+ zw~ka8cJi}=+KjI`#H)_#|H!yByKweEhL_Khs(i8%1afT1c;66k7JDmgX)ZSpid$u7 z7@3a}mUyaxS2Og(gRb1dV+qz80x<#sQ_0do4liy~ak@-JYQNi%bRVy<`*n_mbp5qv zg7zen_@|7Lv#1@A(PrOuOO{up>=>T(LX)$EGz$%p$49*fOe_8diF~@3D78H0y>3(H z)hwVP9=O@4TI5F|Rgki3oT@iXceC7_CI6W{z$f#ocYYxs&7S=XW#r)reU#UkM$WM@ zNc8S!=O1Rj$@gCvJLrw6;&aR?8A2u~*dPdM((T(EMy8tj4(LEp>4zXsW3pFHaNu+t z-$`o^%-*JnQ`=ib*Sh9d?ItK$Ac9-hi&2i9PdfCIvzD#9p2m+=?aI_!5ky{*$mKp( z<7RF#3xj1Y6fwBel$jFs1ok%L>9HnAd-!jqPah^Vi264HpSZB|O>YT3j2HdW8^-@D z{g!8=ajsV|MP1}m*zf&H0I`2tX{ZY|KpC|l!Wyz+JM$lYm_NJTQK=(U{?ph;_7`3g zfyDl*vxm+!OhzEHdDEE97Y(#TebCW~Q_640<|X0KD{40_o~WnPNJY*ZwRz>8%9RX6%$Ji3R2Y;;o^L;PV-6a=)DRW!YM_SEMKLHZ^o0Cx|mRy1?YDpwQ z<|Q{(i8>qBR@9#Fw|&wI9Xg&m&48%CAG`>?jK9UD+YmsN7a|@;)J5XiNIiD#g!3oG z1oA^zNQk;`E807sirQ_hGfQrLTTAx;NhjuqZ`St{UOk&8jT{~}{`L5Y()ivdd+R8y zEM>Y`VwTXRD4k@FdPADFrBeitSp8R8jcNG^)7yt`!J^%h#&53}n)04G2g z8_kcm;?4@@QHiUfmfHavwk0CBYNv}fLO`ky@dZZlzRWtn0Na}KH z^!t&~iSS^FggU1l{7$cw??7`*P)E=%b5>=V1oZ0=YQJGk<>P~TtX*s< zyhSFQZ4`uMnBfcN3d+qBc;dhlyxN^3z1am}o2oA1;-sDO+it0)J)NfsB9zsF@}6s& zYpcuA1j;p8bXEP9iT5R=awZsvKEKJuT9+21a8^M}cBF}kSh|OdvbJ;r%Uvn85YJ>` zmzppNPr4>!K&5hm1m&i<(lbI$87l|OK3-9C@_kqJw_2qKI;R%bHhFboNayxaGvJk! zk51tMpuwQZZEUU0S)g1-@1iNkOcG`p3kET2~zgYmyzo+BGYW?zA`Lder0c-#6$vCuiKPhkOQ+AhPSg(@Ks4bLWP2L{BIvw z_PCXWDE8yrk|iE91qYsSb&mFP-x8hnx?da+e)&wB*=OsQK9AdZwDRCW?BfkexX*n< zMsXh>Vbxg|@IG^#h%OV9>E~Nt;pnyjQ<>~_L?&da!g#wfvqvHAl!xn=fTP>;VJy77+q# zMpfz4?z>;Egk6xNgwqd83mJERkbyA`N>}yy8`VT*@;I7sizrO(x(hW&Xj;EYb-Q+0 zE%CA2n|ot$ng1LKjUwo%YCVmJ^o8x?Gu|;p`=qahYNpu_D%h~J~dT%y- z*1JWTs9FiPcPdg!WURdL1=l+<3Ha5w1t6zV;Mqr$itjq)xcGdik6U$wU`Ko&xx^=1 zIXq9<5ErzjK;OydFnxv`Mg-2+hD`XOR1XH z-L6BS_zY74R-^U zR06qC6%Iri9cWMT*^8kqlc<$!u2cNR7Bo}`?*956rovJWbA81v_a)_;jC!f63dN5I zaAfJCs)@W7=dX`6%zHQYOf#E5xwdS``whG}H(Lp2Q7j2vjd}+-Kzg33Me*FGaZ`@` zge7v$v7I+)Gy|S^JJBY4G}9i3M8|ymdv5a}`@d)`k5`-3=KPmbLZlb5N?XeK!sjM> zy=*5GVNiswURyWqLcKYkp~$&Q$2FtGawQh%SY(4e4uvGGMRFaV3aBw2nLavj% zctXZAGTo}Y2<>NQiSiCEd1NCWhvUNFe&ql#Wa-A&?(x#yE4L?ktsw17cJfk1-T0{> zZ*MN6^&~a=_fLCL>!b>!VN9**9O11RA~=O}Kk>7_vCU1*h3}^z*ySI#ue1XRg`Wj{ ztzccuXRoKcqPSb*CVDW&Upi+Zmokc?mPmuhuaj`bwTqLW51IkAHNE z9*#g+Zr`Iaed2W(Fz1--z*om>BmOp8>`B9VG~3K`p@hP8#cGRk6^uM5L%VMtDLu+O zGMX{oz3Fl`{u@bqRDF9Ooy2LOkiMiCF1MkBP;mZ7-h~t3C*u}xB|`Daz3RO@0a%u4 z2cd;3HupL+#`g-@%?)Aj{q;LMOCAbZ-N_@&sfMEryVIjE)wIs=LAFN0iX(EN?mM*B z&(9&@`?(Lv6lX~zxb=_aRQs=m&YE3S$}ahaDUtP15sdm{-toQ%xsmP4O1wXN&^h6U zRpOL>`-Bw_mV9D6$=vR5VPzcPab3!4^T#~3OChb%iilzSdoD87RKP6Iusj9t>0c*R zn92lo^*JC}g=(Nmw);swe!nJjys#|1bu-1$RrJtcYkw&U8KOgPn@^!Y>FuHuIUFe@ zS}Do1Lem{ceHAJE;&)1D5PdnzcAXsc-)%sYvrTSBH$_BQjRidvP0i9aqM95HUmwKE zp0zSMr|EeGjlP=};gtNW1XJ|IY+`jnF_vbs;YZixYxrNI4B5Mb>{;yzXOC^&lN7q> z85%U9-)9;UN=S2UW;R9`6I)hIav7dL&%*2I!^-+=-Qzhp8*CDl_FC{nO1Pd1t|Age!+haZ1Gw zsv(DGO#QWwd;$ui)B-ZEQ`seQYM!(DAirLA0q^gx)9)lsnT%i8)1&>qB6 zLUOVMte;)bN#AiuLc$bd&M~hws}VEbEG4FSm6mIt6yeA2&D_)Y1(A7CgYwfVikJB^ ztS$9?H^xr4Nst!18|hcwMi-2%pjePyA3#tjm zF?4kN5G8WXU+YzDbk5yHeBL$jzs_Zn*Ti-@0K2|KM1>0`cvA{9*4B%#?kc@-En)SR zNnk(2wZ>W5S%}yv@7&A-UAoOFB*rHhO#FazS`TY^4z_>Sl+p${ebQf&`}Ojfqs6L8 z-16*i=4H0)&fa&o;%Qg!`HmTR%0*fKftp!AS4o6S|6O6vP<+iQ<4Ew+78v>UnA?tf z+;6=FruiqI+L8aHJJ!J1%6p@zA*_b?J|=!~$$nYXGbozUP3s+JJgr#VTU?a$cgs?Z z8r@nyxqwN}Qu!MIa9C|juw<%tDF5ZtvT%y#Js4%z;u zgK>FnA5>yqq?6%POg$H-pq>SI%qK=&#jf5&;v1u1C9(4`HS&FMue06;&Wi`B=Xj#K zW(63z3{41NSGRfBAjWq}(7#t^>-nxDgh~IpBIKlDIoR@6v^0@(en_dys61opZH8QT z{6NNK;apKoyFbxu^%jYPZtr2l^2LUzv+d(UBB*3T69nPm{f2&gS~}zw2=xm+jH3ag zG(Fa6#PFsQh@zDQ7Z0aa_wEywV%jz8HN1g6d(Q2Dw+UqEje)xucLBH~vO@!DUaMZBQ=yI&rmd)q>E)Pp{nnp}S)N+}p=PY9oM)XokSRxN~*D~#@`fGEd>E^kCexm8vg z*<3~Y)|S0Ne=)(O?N{533eWk>mMA&tlIm~a+ z=TpKDI`Cu&!iEDWKRouGX7bmBsmAl`cIrXrMnlc3q8&8B48>{M24eBA*xdTB;<%7W zs_v5E0(Ww7JQ~CGm;;wNf7D$D%q?@yC>7JFm;nWgFdkt%%HIkbB8EZg0-Hl$qgqNX zgm13(E8;3WOof`-psJt5^=wtNjQsGG9#4|uU>eb~AviXEG_hue&|JeZfnK?^uwa}f zbp81{U9?zef=+|pGd^=LLYl`y$m+ocJk5N6p6PJg4`c_Hjs@$uELMqk$S;enzZAvD z)X{S6hTVgGZh6K%+gv)`Nd18 z>ItiyPWiy)nQs_k+J5p}wbjHatc_4#mobgD2LAx)dWX|CDDe7H2W8scIv8+%oAE-( z>O&2Mp2bZ}%Fkck`{|D2{!VhtWtAnKPVXuEl0nT8VK zf+XHy`ovN7ye^gTw?j3QCH#IQA&k=BmF}Z!?9l@Tx}N|=t3VqsW&|rhXQMV0&lD*ViTFIS$1*t$p#qzY{D}yW^f)8#<)&7)IC{ zQ_^J6rFppM9c;-+vEZ_$KD~OFFfgnO^9@(0)@hvBqU4 z!C!m-@o9Ld{M<~c7ORu;Fcs(!#V=jn zRvuo!L+=0jPj$GZTptTJ_JSW>@`yi#f`M;Mz(h5;Em}>i*eGD^m;;i0t3pDc)8DPK z2LmWQjqsk1qZ961-C}WO|EiV=UlZmnm{I#XyCRjum!BP5vcn(ey0gktm6%2n>4fmcYzEh|_`MSmEGeH5d8$heoF6~m)?m6X)- zQGx-&%N)0L*K;&yWjkxGM8|N5jkg|(zy)~ z$ZqxW_Iym)&kQ};$Wf#TSS)zt+JIj`9uI1!>>KNomJRU9*pbPV8WWot)jZs#U@1`0 ze1&<2W`${~Gsv(UJ;;vGaMHDSiecJwziPo>JS}3yp=kZGbHH73tOKiUI19Nl%T6aj zx~wUR*V7MG>GtsQ;z5TuZTVU!J<>`E&_b<|I)HPUmf4$ceRZ1J%?EgDjoBTpvViqE zKL$(>wIHRxH}gMj8PKY^Y8I<&PpN%H45nm?i_v1z=|M{*i}LD~@F9J%Xh>Ky-nau^ z6G`Rt$5^rC6t(l^t}$cps}RlJ1h(R306#__p{VIfKtGafwEwKaf@!ZWGoY@!L@6mT zMvEOevAuG!w~Qglb<_W0!CNj8X#CZ7fn&ZL;MZDyLn^H7T0Br!70OtY>7ZtiFIqW} zA0Dq8GnZwyRbBMI_2ZFvKikFgGR>PW{DlRP|l*F9J{_l>U z|Mx4DDEHEP1|c@2&x_UrXiiVg2A_+50Gr zDjTXD^5K^_pK&gUV1IJm-8Z1SJDF2W?Ze~x=EM0Nx0_CB|jrGtg5dsp0H(t_b zc~6RQ$U#7+io*#s=yDa^A)x=A5$Awm@+dK4-D&0}DZfv!oAdE!IuXhBW-)k0gywDW zclO}hiQ)w6ANmccQZ(U6u=k&+gMc*dDP$qZYq66(pg3)1NaQ_vdavX@U0i`$mhn#g zj%A2!D{Iv^a^_4}kz;XgF?nVF4DhJF*0&!utWw_3%h1^hv6kVqj{d;@kyG*gAqi|} z27Y$dLh<@XvB)H{Uh`FUnD!m)_~YG$%M8EIz0t3E6KuJ+>9?NhQT$iUjDz9c37q+7hJDK z?C27D|L9F=M_DU$BeVs4ZDR8!jqQnb3HwiFY?`FkBZS18B5sy=aB@`l>h(F^W~pyY zvpU(#1|JsA83@EYROP3#03DP^vKUyd!-8t)fQ<(F^o5^g+-1hR9j$EWUALh2 z{MN^DkZqBh`nzV6_|4&P(w-lamUyjWlbnMBsqzG+gh7}zaCo+kj>?`vGrNUMRhHda z|1m=^4zwZ)eVI9m+#Qhek)@uX9x0|oEpd6_Jz=-3*4B*RU5G5v&EQ`ek<$|lNr@qe z*Rl~-R|*o*G&+27o1YlglQqTTtYHu;1UY|*xx3I-10D7At5xXDcit-$T>gWWntEyQ`K3d_2CY7 zQMb8W1q|*7VBs~PLC{^(S`V7I(zxExS2Dus{la@Ujm#ESnX&4}Y%0%u-oVw4zB?Md z1CaX}vd~YsIjO!=`^BjOy3H1NiH{sPwKL+ZiB}cRh$kB#d+bpBHjry^&&BO5no~kX zCjqHYy{P&q$tIFUrabV`yCe%Oc~VV~n&8v$ABp}z z4Vsgj8xj1cjUpKc`2-0GzL2gJQ*S}gx;l8W<7P-ZLekjBGDJ7q?zYbZJAVVoGSK<`zFVKJpea zyu#)Ng>NgU^~svqBIEu9Ce|QDifxVq75{v4qNO;en}&MB-C{4iqdU9Z9x>>^Ue>7V zTW=M{R55}7e!Q%(nw?$-xwM9#Uq`8)5KusX~r86Q>xTJm`RrN5z-2 z8Cdze>*QjN+Hg&U`ZIhHKL=>+i100;P4Vl^wL)i_6Hx`72f`S8Aqw2@Kj1Ny%=jcb zeY`5~6(E4>s(s+d@8A*H@8VQkP3Xj9l(9V5ska(=lROP1Pcic3;y?9`S(PMV({y1Sb;48$HV`ZfaxErRW-W z*T+#qbb=(#Fbl+)#oR-0 z3*X{Elzub5RaStXm9#bb+eGPkH%66U+7QgI!|2ZD=A?0p@;59xkH(7V=WN|+CXEAWoqhqof9 z=#pgc6YDa>@rL++DQxNVhKz;SX5V6oGzllO1ShT2kvnQ|5ZhnCpSyP3dAg7qv@4Ju zBO~;d41fz-jfuqdt0a+V72UE_7M}i6k((O~PKpH${1*8x(*Jbg@voheERCf^^xUMq zlh^iX$C4MZjrcinX9Rzv7d?u{{cASARlkM_X2!_nls+bp>6Ky|(PH2?3H?JOo7^he z?rB77BChSSRaa$Fy(y^U=I>;8jx2Q}&QFBn$Jh%vml&p)%p^)EPN|)0UV-;_p30ZK z5|s%%kio4fy88rQP(>5R4_?Z9KE}tgA(Y3hM&{{_%ukxNya{X#=0C^A5E^0RoPz&z zz1&8m6FvcXqL=Seg>Yi*G+$BjYBp3q#B}$KK^8@@T=Hzs%^NK}L^USdnD*LaoTWaJ zIp|cGLeKL9B*6wBR0JTm!M0}+Itr7Eu&Ll`6-YQbWA2K?g_WUu(dpbpw&)1=RRiJUXTXoy#(s=(LA8t!JsG_|jxqr9 zzTEbErB|3coE+Y}SE9w1Dgh1Q?-zLT2+kyIvz18r7>->@2Y65!v_c}bUfbrDPlRK} zmVMa2Z)lSBzjP@#JEdfUlNboqvRI!@=&?1PO7cqI@QH$28+zLVZP_~;U1k17jX%-R zMfcjFqo{n{f6=6^nf70t2aMbPi*~MWfdAs_&L4jNq9;9*{J*&GEfM!G#x?CK6Mw6J zEHi+BX{6cIo@=UGdE)G@VHA`fUm60NcVc9 z@9tfF&fSuB$B(p5Osg=6qyFVxacfSXLafd=|5>oRxy@x8naYGDI>8`ZZKUZIRQ2?^ zbu0Q?5TUY3DVwere+p9pB0Fx1<(Yi<#0fRT*w<*n7JrZ_+#kHhI|BZpF9Cn9^-B$9 zVikw9(eUU|i(S7Yfv4q{BLQpA* z@x5R&K%GmFIh)^AzzDI^Vm2ldV$vJkTe}meVgZdR>p3a1rVig^KmGNqdwkRoQWC>Q z^Ik%Ww((<@JevO?<`{g3wkSc~ze?5BApG%^WFqv3?X{se=GR?Op1M(eFm{wFyaCee zO!-Kdyj8sn_IBgk(_!s3X!70$Z|^{<6{o~q<1D8zE5Y!WB5N);yfq%DA}ovV3%s>- zj1hbA+pGn9T|CC^jzVhy&Le^a>!=ub%R)^9DfU&m+st7?1j%zJ3N`nsjEB?f@6&~a zNJ##WT*8}&QUS7Ct#PI}8goYwP-fPAO6qlMFEjreO?`_ze8l9$1gdoGnt?Bv-W<~_ z2_XX`yuKweQRaWv!BuToyMqAt^~_eNa6#G-`B_I&)#rB}axvlsfJ5|s{wJ^5u#;3D zd?~7?18EL=qnFH-gQb%)+@-e8somGZux5u%ns?uh#h~k^#9fjpj4wW~NI5wN3F=Y3 z)z5MGDqke15%QkG9&>ANnvHX@miDD>5T)eb`oZg05HQ6RR|dIO=ft771ls?%ob!zg zy_nasaU}1X3&;~}W66-XWu`%XS8*3}0W?q3ytsA&9M9b@r|harq49>311WWX-kHcQ z{!1Ig>pY9moRz~C7r8R{-M!;Z1gUD^q3u77{+%Cy@+i>pv%Z9$XkjxyG3VAdU%Hh* zx+HY$@(45{jTCExH~595V$F$jy9#X%`t6zTWTRG>K(QjFK!IXaoYJTF%#ZuUGxMMO`9Cjq z&dm4PYhNTgXZJeivuD?J{%LfgumGaBHM)2H^ipcnWT%4LZ-*%kT2M7DC}{qjesEnG zw`A^%7Mp0Lvnj6(GH(QpP*8Kw^dV9Vx3gaG5IDc!3LNrbY4@I&6#t*!8)!NpU8qzD z5K{ASx9AeZ^ge+?)SmN&k^iKn+}6Gh1x*AQ#!nmhew?$>6jw{|$ov)z17{|HMXOo> zw-mQB_v;3ch9^uG90`tpg1t*5T1e z(i3nHNV)s(ow~}zooz52m)VFYu_;k;PSO*+DT!*}V<w0{B1#JH;ea%`-$ks+X&lu;sR{}BT3|+$N4(j;hJ?#ETuSZerSDVO{EjEXXF-cGvd#QqPg(~iX?;d}HvbV(_dU=sj zd_$wo8+E+Yfn;r$RX2;l?ngc&czMi}T^O42>(|tzEW;|2Ju~D-Y{016D?HORpK`Xp z$BKkuZC z8-ltNAEn4ISwT5g3t9OP;>NI^U=A4B#0uY^{wjE1_csx;!&`XdGa`I5bqLis46f`) zMsG5E)Tbtq7>nYtqL+1#=wgr2$o2`n7X<};EruH`Ur7A{EO?O`0_do{XGn6TvlRF> zv1kJ-Uzwbsjm0Xn86CcyOESyVj)ZX&rVHPEX$0A#3|Q>N!j!}6^#!lqKNW|rz{2wV zWVo!y=uj-?`r>nEsbW&8pYe>xfPM{1vy^Ovx6C_os;0+aS|5QcHh>Q6oyej94^>0OBF`f}^LsT}!K> z)NrKu6Jg{_MSft{QRJPkXeN3TeYeI{G{$p0bc- z8}JDRIrhj;(-2i2*uZr*xR^R77yCu%3kmfw0*Wp01589v2_)llRzl8 z=et&_kfy-xDvl>DvuN03m23%3;2(I0)t1uPyGC@XF$F5mKvxPOdPG5(apKme#{(^{ zx$@`v4A%f~+ER+R!N_o)mQu>7q==rOP&y{_DFER%1G*9~3jS{6MrMWYZ`t2o!!$$H@LB_TC=Ka|AMaB=F&Pt<$P-Tg+AnIdypHnj^^l)|ws zgRJw4aj`FL&>9rBe6%A&SSqX4mL2i2(_=5(4h`$Z zai#z!MyJiV7;7urY7b@7ThYgRK{Q+rp$QC192$5og8oy{_W6WBX)1{d``$Odqp;d~ zU2>!!fW!`qlMYvjCjHGHK1%@=-V3s`#^qzC@3ZLVWEd z%gUpAJnmv4N;Zp5`e?E`dBUeia09W!tst7lKfRm^8j9ZSaR;@R0V>yBU!r)1c9$` z9gD_xADZD!hUR018*68mN$!Nln-W)|OdLt02(YS}2y0FB7uz-=N?W*DnNoVEu>?-+ zE6Tg|?j|?F@L&cg=fat*%BA5Byf8_055J(X*ZjRKq5JJupeYw^NPO0URbk_x9*KjB z@z}e4c_{fG7RSH$q`x*MfZp-SBO83s42X{EGi`(cdufCXX-F42@TS6pHw+IprqH95 zy`qFNESqL2|2QGUZL+~}_g;mz5#6FFLaPiNsYo`xBSMZObxz4iHL;xTQTfz#&7bSj zp|)3huIM44pzw3znYt%RR7<)K38OMBrFMqlFjCZa4_lELeod zZDVh_OU`pLyb5@%AYdy_)%zkUsHw4tr2)_5eBV}?++G?&EUV;<|YBshva zb#mx>&45g}U=_zfxln26DIR&NMAV(;xKZa$TaJV?xaWW#gd})g>OY~grYTYEKqsfT zS^Q5}V37N<^vO+*nV@ke-rY0-gg8>^uTx|I_{Zn zKs;72uVfokiC|>bp!U1E3q8a_I-Q5j{?1RYLDvGFZXJMao`&eC{%J;Ba^JJ|_uuh9 zbSW@M^!`n^@#BjrwBrPvd13kYgvB1x{l3%YgkTRkpXSuv~x);Upouv_5wZJ^M{L(p5JvmTBti8IqkX-MYz)B_{n zpfiSczZ2)$<#@{+0>pzC&=ge)i&CQZm z);kZt!B(E+8$w>*7dl@e<>BL|&IQa?fTeAOJtMww?@Jk1b`XUDy1FXpdLp`mdem*XSbbXQ-REVVn72P z-}I2~2HTCqgKb{t)=4&c$)D9iZ}poSm;c&cCRP{&^$)PLmEmxyc>OARgnW|EtQUuLK<-Y>v%3 zb(SE{{$~}~k1AaID|69NF4@Jj5TABFOlm_~&ed=!7)bt$B%pH($ubUnf5wD%Ax7kdmM0|yv8=uM@a(ScV6A$ z?Y!e4S6xfvdwl0CebUqs(~;9iXThS2SP-{*xkiC~ouT$hakMr4Fs`ef40Sf0A73z` zhbHEAh0*LzyKM;iJ%jc{h1VA*h~hGCr2OVoCD_Eyhi2`Jmz7=v*Y1IsoxV@$G`JY* zip*+$;_GE?&z((yvH*x$;C~8R(fCDD?VO>$%8>rZFoYY2Q+p%my$UDMtQFBGKCIbV zV)2PiUUU2%4r$K^AIJ@9h$J>5;zc1?5aUcaJm$9qS=PP0m3~qzBocxo|;f|hcj-Q>;qEpd0wAf@i8By{dH;IH6&s@Ls)&$B2 zvPJpt=Nr{R8FY-XY5mHsHOy7y&j}r_GI=j*H(cYW*1RN^RP1#?tFlnKUlKoUE7eZ) z0aiQL9<-7MjxMC$VCFJ{BiqZ8Aa8HE=E!!9H1;FBJ}za`K(`GeW>2iJNzhryg$|hZ zz^!-1J@i*NuS&@&J>KMyA3al72Ve=^LdVn-$^Sb^owI~L~AC@>@m8Djsr`i9%a?aTa$08MrlQI`i-ngASV^F)}oS}lx(L(3> zHmz8nwepl1893V8DBRdMkj0Xbfar2xrGqR*g@nB@ZJbeDQ&00aCakflP*oEK{OIqu zl5+Qq13F*lgs_LNKrBR|!YxkN8aRVe)X-i=nHjQOHCww(>jpj$xqmp!^N@%O zbx}YNg4O9Io>&bht2s48_z&lCBwl;~Y)9l%_-6j{F7T_gA^9_BXgaPbM$BOhAS9P% zY9lH#gfuqq7vEdtypL?$$FMt9XmQ)8WxWy}==v`82 z6Q_RTT=_Es*h51TXA?ZSKAii8I$HF|=$@|(+n?y=QiZ66jME0a)0rfV$XPqQk2Qs8 zW-+5?dsrZWuM`T5--q)Yzy9$X?zt z!->peOx5Cw%6f)h*qmhYJ>Nk+rM z#Oh_Tq)XhJIG5>!z1B1~jfLc`@#yeZ!5sXJn4^|M(t@Aqj?iEE`0DJ*WJI5DdA~pg zovN6G@X>v%=H0CQOml{2YX8MKTiVSD()RdUd^1Z_yP6n`y5pROlvt>O>Rt)(XNJN! zqXy+!<3uR+M7#N#JsosUyG-k^^02@9yq(=5E0SiP6BRVQ$`6x6;G-+hq6&hxJWZvYK z;=`5_jZe#BBoZZ_2pubPsWxfH0$z@)2z{a;3aWW+FP9mWcwzy018y=hO-%Az-hj`ETbUa zU};UkFkBXhJAK9!A9AY8dn#j(xvDTdO7}ch(krJ0gfmG(;@=-_xCSH%oLPi9iq~>! zKb`!+6vonR;!bagIcUnpA1l=h@ij^2+J3#ESv0Aqq01q!*qPKqidY=OQ@Ox3kKA$O zqA;kYEVA$opX{fJ+O#$&2eAJMf!bRzJK`lpcz+Z&F2t5r6xMGNP~g||7%Yety5e0X zq3EjPn`Vk7Fy+=3nV1S%Vq$jeWiJza4T$`APE5%L)>DAj}gGN4Er7&yQ zor8wKI8VR1-#2_2UV>p)v1;)Tn$LpNH`R=EGIC;ouH+H#5+86uewjdZr2d$ zB|N?xT*{)4+gta`n|%18KBV4Os^dn6<;iYE#HwE@X!P91kwVqmqA`Vp;8=g0Wn(5m z9*@!WZ;rYU9v>G?{a>835SNGoy(1Q{`AR9#mH8g^9p}uG8K?V8GL(rqP?}YOB_mL- zCCy7Wh|c@+H=f%A2*{tkHITmEj~?{PzymLGJyc1 zVG`c`uZzqST0hyzV|d}{oDH>fUj&V41feQnQ(%~LG=?T_um^Qa!O1&Me8rpe=&SZi z;aE+qGEEhUn`lv#JS_?J&Q)*)s#+pCOo5Qbw9LUR(mU#j90o5Mz=bON=@+01qG3_l zRpIf#qhvl)v9W*EdxUybD&v_i7-b0MVCUSQf6VjcCAC1~WQXJr?2ZrvU6g^at`kT1 zQY|0gV#Z@Say6z&UI_UWdc38%&h=dp8{fGoj{FKC)rKD_S$n6{0P=-wtTfy~ z%kI|R1;8XiXY*ht>m@nn)K<>$#K;Z@vp5PWJ6ui2_XZNU8Cd*wZ<)7)d8YUb2+HVj zn3-;n)2DV$f+Qbwc%$+h9Ni>c%ckcY0?u+6`x2X!w74R55Oz7H35%MDmG5O94gIpn zhri|t?~{drIHe+uIdXnemctftvMio*zVK_cCx0hxjd*om+Md(FvfZfHE8%^!V7Gl9 zX^!bDk@=Jry=ksvqRHHA*cerx9ZwOt!>c7%`B8wbnR>p2uEo5s|C+a2r~p+SL4HV$ zXrGf8R%2WYYeHkPsk{+fv&o#0CGPK*fh0eiKVi^Rffeab`>?V}weO-ued@9TlyyZS zthFY{{n&Jw!hragKLfwgndFq-utKsj@OQBxPC`lyGS82Tg;(qiG+yF~4VVy%fTBT+ z#;RWg?ag_gW8rV|$0SuvW9mzWgabMi^z=-KB`(1eT_%h)|1Zv&*((A9s)H8wj&YZ$#!%yzsYRzYFJa#olT$Wksby6SuqBw1F2`;o zP~^A%^&3i{riv0O9h0F`caSBI@3gxtGm0QLuf^lL-gJCi5hIQH8>jf2CFdiSNDB?L z^YEd6GR0r9@yW%G-^3D7By+%S-_{?R&tcR`>X8dRe#4SJ zfpo!Er*!c`8}mFRq~x}@i6+0Pfv~qC+C_ez8}Rh%HY4UAz}-GJr^zfM>Fl<1g+NSS zF_eUAy@X6WJv`Au44R|D>&R*Bmm)8(Dy@r>XjtA(TiY`QXoaaVfM|THZcLWQ`mDWO zYOVb){@9%Tz3!O~H`w<>ptL{JWE$QFZ*Jk9_*U2Q3pcxCd@C7^2!!qJN;M*xKa8DhS2g^2TANiK%;>7xI0?$D z0Bo?W+mbgv?Aw+KvM5+;$DiHIH`7(;>5%{Cr{c`aGxGRW{v39?;+u;R>QAl1@ zM&u25LR!M+eIFsukPQ!x)JH%>${c$5f^e^Cef2$J2btzinzsWsHm#4X)WLEGDkA{_ z^7aOm!ek;9xG}@_{&TgxR<17{?RBzRps|@QTB>~G#)Cp#`kllI7%Q3z+_`NoUiA<( zCqs>zM=kohg0yKg)lH_6>7bV}AR_O#&+%1>kgM7S3;hj;C8~-XdGVc#?rM&Lg66g$ z_=qnD<-%r5$-Dc~uHDYTS+^`k(rlj}pOK6;{DZd+2OI1Mpt=>o=~Gs$Uj1D_z16;2 zBE#{guwj|F?NzhBlQ6cRN(j+jBocMb@ut|%AT>5ns6i5&tp_>q{;&R%K z(kXrvCWsjhAF;r8aIKR8WeTYf$N+4j=Q?bO2AdBkmtc)V|HU~o#i$xRb&(VVx2M>f z)4pcD~KyY&gK*HLP94L*?*2JwleP0xw=Mod`A0Vxsb|PDlXEJYADrb!PuI+=1E#4%&_iS7lkX~I?GRwo-pLtJooC9sOKr_Uo$@NS_f2Wsp)VC z7E9KNydgeYauU} zqM;nS$=N#L9fqbXt|Z3)#W}wKTADamu8{qV;iDE;Fc7`V*>5B3^lhUUn7yhs1x6P3 zMdf3`=6LVZ(NA5373QSW!m-2$oMZb_J+!vZMImQf{$7Wg_U7AW7{?T~0Db6kD3|YJ z93%-h|4W2BkkA~#IjZW)h&nS3OH;Gr1$;G?TmQo34B?4q5&1Dk^7?Hqx*WN{PXKB_ zpo`IRrK;}4t8W2OHu(WkzUudQ%WUJKC57J!&0Dr=X6ltWy?Mn&F+XRjdbq}h;Q_ss z%r7K20%Bjg1XrWg33G>~EqlnZGyWFYuyIS^nVP52U;=6IZ@u7#*@kwyOrGP@Y=SYPnv~b=acQRG{h5p)fK8_aW9ktIXd^xQ%;$`-^-# zbhqANW=-B-$LhZa<@_(sxrJEFi+h$l?Dxlc0o_#^<~!~zB6f*u>{iXtY!kxq9Z14P zN;(xFY8eym^<2qH*H>6qu_MNH!tA2-p``R~c21uM5X|gY5_FXZtA@P34Pr zAkbBzw8IB~eCwk5u+_lo{wQ1cNe8==+ixEY=ZM<~de0I9wE-%oqP`RMsuqk^GYcMh z1eI>2_XLxR#`i;9|6NL-z5DjGBR}WhXuyiX*|Y;hNQp$OT8Y`IC6&`agc%S~NZ$iI z3Y3BJuT8^43~y~tGv=)Mniuu=hH;|b5t`~{&)3a5kJI6Yp|GNEP!K3G$$n{8&>h$;okRpG5P9I^O~6@Y9ZG_Pv_qsLV}xx-H1v% zr9riRflqmwu&aRHtTvPTHrH|0N=Z7{rZW@2Sqxv+V2|+3%8nuJ)hudc81vuwG*3(YCHF`u&2*{ZWK3ejGxZG9_St?>MKt z{jRG3uIHd3Y9^&BIWlEBsox7Tx!nt@l>zDPQX+}%zjSKx+s7N+KUi|x4Rz2M^o+60 zem)Aj&$B>5PKXkeU`!)hJ7yR6lYPVX12{~`_&ULZKp({RHvN=tb-fRE(NKZ5Id=k~Yl`Mth{9qH0}muJHDcQw9Lg6};x)7ExGxvMFaT-)DFL)yA7_Rd)O@&KbKf-)xp{ zB3gqqLpDC-nay1upz$b~N#PMX2)k@b1H!nYo49HY8(Im(jD*TLZ7DFj#N4BDhJDJ_ zasM`e>`0`gVkW_-dAb4som%cj>sGPX>i%TzLd3wP4H-Pj#- zHv*wS|HV1$n5+haHedVfidZUr;?@zp`-)NLh21X&ETMsdc5rzgT17%}W2pITN`Zh%Ty2S*%WE z0)26L=|F#qOTnjWf_t1K1?~4&^#3=Pn&Yu$5HtKm(_~+C+Z-0qkFnA}uTU0#B%H zx4p3ZLfo3g?qMBJMYGV%0M~}+dk{aGx4+w;^w0OXN$9>c0zKad8gB8BPoP?h>JUtf zVDvu(O?N@W=E|+KRZRY#5&K`hpBHlL_|l4))BGMM8!+a;-|4fctam_+T@Ps+Si=$O z&i=oC!Zzuclypw+K*BX!&B8VAuJ~^D6PsHPfZ(zSVaq;8o0@}wDVB>!k#(Gm=FJ7( zc^nAGoQ5F8mCV3#AaIZELBm%Un>2gd3443FSr{}_Ev?M=sqiNevBzE7P9^Q;@yfq( z6B}vmHVL!USx_YQWa+}2C)=zIm9UX{Sjx;Gfpb3AY z8Q}Zeegfj83U;8&`mUPPc0+wJN9gKxN)7n{WW~{!6EGRDm*fzOQ4X+!jYNgyuox`7 zP!0>k<5e}%8VsZ$V6vH*RPb$dl*U#w?Dt@d>JA*3m30Bsin&T#JhS7vcZvISS<3Ps zD`ekgT-WRyUHef&?;p$N)~@l7E!q`_{bOmoTjl<-na3i~e=K2Olh{8t_LrdGKQ<{U z7XR+Qs@~;L`Ez6>fFI@P)t5wz6}X?q^==*#9&zs-XNBR0vh0t#5S{WCfxFzHVMtam z;Q%I_^*Ik!kwYU_n}&j}!zjur4zk4jHzHvXQRXL)AM;!zpDGTlg`8GF?Qkms29QR+ z7&zanfmZBMF@2>mpE9@n=Wsvc)6Y8F#-vs(RtDyxjjh=JS=C_E7&ZT)^Und3Oo865 zk6aNdLu#^ldY1a~FRn}#M@MZ#?WrvvDQZ}Q4rS@E32~e}<1mi)0oH0el#Dh`3cCa_ z^{>u!bk|XtpFZ0n*d9vfPk+Y=`Q0Kk+(B*UR#)*ZRf{uyctamZ zq>FSw{`9tbY!;>XL8#mH+E#>fn}x(8yvD#DaQw&|O$JhtDx=0e|GutvV=0S_q9~OF zuU)w%JQ)ZXUEH*tQQ~m-hTVc89LzA=thwl4ZoBeYWjXqJUHN>)0bP#pU{2tm$gnfE z`VZQwVr6sKDa3RCd_<~lEL3RrS2*Qu(z5X~!}Bm=oEgX41AxoK&puScH&Iz;mn!OE zAA0UnjI3jGo)61sZc&b}W5r|@t&9|f>^Bkt`v?pAwI)5unIOD2f*rYU;9h(<(FGLw zgHXTp3p3DB)P#&-jS6R#rQLEV9w>bf6=L{z%Zw7hNa*6P#XG_^M%e4({o z;I>vfkY7Gt!Ir5=bY0+mSoVN`e&o7@NATzZWyzV8lbxQp@0~yX$8Frrb4p%Iv5}#D zc}2@`u7kc3O+S8J(m zNN$eElI?D9N2Efp=vBR-ij9Aw{`lpF|33}eIm?-nx|;dUpDvUA48GRnCvqC;bbtgu z_6SHsIc$UJ1+P}Vnm4J3aN%u<01JIu;1A|nY@WVO6>fU5!>))VXDqyr6Ht+W@Mp^QwL%C2J{H>XRC*CIMl2z-+8(p`5d-4;hxLb49)1 z4)AphVz~7TiRo z>o?vnr@TL~N5RGiw*lj%JLeqcqi8H2C~-b|$+&c41H&9Cc;|&h^Z4dQQ`e-k`q%%k zm3t+erlF7o#oPQX4)OZh;?A5K0DO4MNfoJ45wu21Nm)h9&VR=_N5)5^N9v!rRhWd5 zOnn7f2M``p&_`r?b&d~Fxz3`f-2Wt~+$=HqOed_m5RrR%pVD5cI4cS$9o|Q~SU9sg zhTx=obuIrg{|xTbe19^;CfO5jCBUet-X>{mWNqlg7oP2|;J%Ke=>O#@EAgujT*(n1 z<}>bQ)>%#@={E#StHLviCnagjYh2Dy({n8lWc^F&P%LMs@=LytT4bmO$C~_ zWK5_I*+~dUXONQs2pxw8iz{hJ)uW@LUDw`96aGcETqX|5Hka5LGjhZ5vFLSVl!)

;m|`N`!eqGv;f9hTQi#Y^TB9QDv19!TY`q65H>f{dMzy3Iv+C^vl4 zTYeIWG9-wi+|Vj8{^lY^V}3t@Z>Nq=f{RrFKPlQuDfi~B+iW|ZPk7Gq@1Q@X{QkQaqWH6&dTs36r=s#fe=kiF1j#t>B zEa3cxveCCQP4V2PWI%4o*|GIH9_=?vl&rX^?5@ty2DNAh1)#h_MC zVe1RHf`)1Cs`BF|BI>a&`P@GC2Qg-5Hbveh?&h+&Zg;-3$cazcfNw{=RL-|HSWc<0zrJn2D&$zhHN$FZ-n9t zq0SI;XL+2&(gF z>U+^Qs3ZM9M_Oh)C)`O+#Wx%^BiK>Ml4dr^K}|K33ks0tgpKM%aO2e7M`r(|#=eefg+8byN;46{31q&_IGEXF=pMVaQ_H+N zM2SQj2^3H~k%2G!AU3jyO*8W>vFJ<2b#v4OY%`rd;cUq_v%Hm)w0qAdNyyL>s*s^J z%jdR0OD(^a1$$S3Fnho;W(BWJ)pWnr2wCWs3`aBV3S~`mMt{^$hYhr+SjzW0UHH9u(oiM0DW_WPR30`)}Ch=l0RHLY%T8Z`M%An zU_#Xi?bx(9p>cx4&Ur>={^Kv^@Rnw#@OEn|0G-W+Doku;N+XXY0g@L|*g4bH*bUGf z?BYkS!%3}r!Saw2aL)c~-L{S;GDJig1^G&h2v$BO6e~W*DGcHY$2A72j9(F{K|l3| z?(KgQ+-og1zHI`y9tiORNFt;GUvK`HhKa9Q)pFpuQNE`3`q^uPv~j8eC0REKiaxo< z9JzBTfiY9Euf!BZ07k1gcWc~Te0%@MlUDt@!+gjwRc>wAMM!*`E%4y)WxB?v>o(la zYpIs7Uc)x|o`wTYSdWy;w#p_{og0c1BHnUNR)%(sg=C*tlxIL ziu#vxCK=cN4*n<@W1fOTy{ykM-U>0|@lC==3_8-rzhPoTtk8H|5k~9L(+*Kgioitm zE-3?cbM-=L*hSEWGCKyZesPo43#FlN@8!##f9S=c{u4zy{R$-0q{M?Fu6Mw_Tko7e zU$FPRX-JnSU#l>mkh7NZ{iWq?;)NsKeGp^eVL-qi5$f!E#UQ>^3d^At33Ja1&*0dD zfRGhQHcNCOi0JP3$al;%K%#$%1l-4_0@YB5PrXL?R*@e%8NDC?2m5wE)PWIy96-ZmD$(3HkKFl1$$p zU3zSo$IIPu&PyBEp_Na6pstMVq8Prf0{bJZMZXXBI8D8-ROFWQB1|4-H8%q$5j_r? z7h+;gR{`<8HZy+pIZ#eoN-_%3qK;}jC)Lt*VQV9JiG~sYLQ}}PnP;uSB_6sj(Oy~^ zQvjylVu`s4i7pk%1IGdC`0D>#*LC8AjX5{OUA~ec{I{;!Q5WCkR30NA`w2alli4>Q zGMK&)4t$-xjraZfnaq!|XH-Iy)XE~gor=;QzWX{m6;q1fGTXU4n(%+a+GMJZTnY2@ zNnpKF`ofhb^+u(L=cdnQ{ z?+=0kOvj9NR#xF3huihcaT-Xt4CSMnm`J56)P{lrw)6F2oRm18-{kRd-fw$M{j_Ej z+F)c0)zk)RA^UlT8T>UvJD?g994d1A{994$F=yB)UOtAqd2R9iy=HlPu&2)rzIw10 zKKGPpgv>$wu;7CYBSMkwNWwcmJ*hkHD^?XEsfDG^mpC0y!ANcpM4Ske`p9=eG2S^7 zicsM8`91PMO!(d+oZ8q!#hlBUo(=B{c6bfk@b=mU_v=$4hGOD+UcSZ~b@FNk(XV{N zu#JJwf;*quMa$%4-A4+ZlU0|rnqKX4>i3v+5fFElIiwhG;H$oc+Zu*_8?DnRRdkaT>R>6~e(#7<~6OUm0&F#Y^*&INHc`EgDhtQl9B#KhGCrV`Zh4 zWPeergeQMZT^sl!Dkjb|gf=}+{z?6=YCrOxLNEPmY5L?`m~7gnE+12IFs^M3c-^Zg zpr^kEKSI-o;q#v}h27m{jo27x!A}wh0$%)n&2+=3IKJOi==Z+N-U$^2Ie~w0JD~3Kg3R z4m3*V#30)IAXPFWGE<5dm@dY7ZSWQ@)wc`>cd4DPU`0y>x3kaXRLSMLoSeO@RG5@C zl;zN+PxHG9f%11EinQ-2Ftmo>EU6=u%wLOUi!Cbc*hE!-rf(5F;0rOTu>PTs4kY&| zpw(|p7rx^a@8W2V++8fgKX-ARr$xlhWk|g5^m|nPLDD)l)L!W__985>f8%a~s{o?7 z3VOx{MLm=xVWPra|NoQjN~Xfx%5kdu)?QU7z@q10ez?yq4j|2}L-}BR$cu&Gx5V8z zRf?V-jzk+cCqLb_Q!E&fclynZgjWB;Q+@D$h+3l8*MI9RhwIX5&ZJMWWw?R%IT#-RbT>pTPI-{nByA=tw#B z{ARt=U)(DqX#!q){5g-ZL8(fG2RFGeSLvwmnm)b_g$1SUpG=gtPtn6SEo!j$U zkw%-%cJwFI)T3kEp!Sy9X-qZ~Q}V&q$Mjr47@edPp?p>zOchni!3U;tD7X?*93-_i zd<8!9cJHnti8hmkBe>>xAi*fUrFlvUlS!6C&zzN8w?NUgsleoUVcb- zoVsS=tB)m?NP-A}S^~Iz^p&I-kFa05w4j&$s?Akhu~+_RA?T&$m%z!6dY9f(5+m78 zCd2r^KJo!P2mUdZb~|d1zsJG&-tMPZJN5hfzkgFg7WdJ{wH{Ula{!NfC1$!}Iq>*W zyTCcszOZaU4x`Dz9J`WCkw+-tDtiKNP3{erNk}I?Fr3bL=mU(qr@!6}g+UsIClYFE10Cpi;brveAhACWYqkzoO(hg%xNFd;rHxj`oC z669YrM>49NI)f*cHLk3BfnhI&rqz+ygaepW7%1C+ha@O*I|HNi?bvkpEZ{825NTi|mDS-@NDy87pkaDqXHZz#|{qr+%C80=`b|O`D`|xwbYx+_Jd|GPk zf|nJj&XHoLL1Ta2$1SMHy!ScyBXu}L^v(4KoAF}8g*Yf?$(vT4)m4&d#8P-%lQWS#(N2DZbo{YEc}q0Cgky^6YL z99U}fg)W-W{524d3o&9$`!DquJm^$8df5M#Xs${CaH(0F)mbH|keB3b(J>es)|N*`L^jC@<<_oYREF#J3!z1hRu2@_{3E_4})4&bW=BiBmN} zb~9SGXRXKP`<)MhD~P7d4E~KAC(#%=~W8 zJ}Kd;Itn+$_}C}eHv>;PRI<-X<(rw0ifXf%>NmRkl1t;}8iwT#B=m0CfN)Yit-d}J zmG85sZf{l2?A}RO*_R0D;C6&^7UphBHP{9#Aj)*87IrS zI9?m&fgS@}WHWaSJk{F2Xd*HPd2ol^aMR6Y!y00?74|-gTXqq)m|Z;r(e#n!A=?9~ zZMt=q2ow)p9r5437A*KkN=i;wC!F$5Ch$xufcUNRhalobF;b0z1+ScWmM}ZL3k6kt zUfbXLX}BMbGbkH0 zU_5SAjb?G(Gfi3@ByC*KO2AMa<|KE-<5ptL6fx0lV=rQ=w5j4K zG%E00x}L`o-%=UM96)N008J`Ubp{%61k?hFi z4E}M!sLXD=9(H7L!eC#X4Y9U2Vt-29COCtPkbQM~pfGy%#1w#f?Ia48a}^@Bm*e?k zui05~?vj7i#dz%@5o~2yj^FL@OTGNFF<&i8Rv@E`NDGJ3nu2Al7;n4wL?3D($x)ng zjoSgEA`%!yn^IN+96)q9#)ey?_7<;i)RSk^`Kt$b5Ib3Rq6m8dTE}f&eVa``Z6);s zBX{|rDg4`kX8UG5aZoN{73jZ=dkS) z=n-B!xq6ogakd$uKNql-@K*CZXqsb9htEDT&>;Y$tC>`xDTQ4}=iVqR_xs*w_6;_D zNF#b0NmXkbarb@p7*B}z)>;}6UcXM>FOW#IvvL*+YoYYMe7Pzi6yqqHn%QgySiTJY zX1PFqT;dTaD9Ax^nLJKIcE}Bl%Fd<88hGqcV7CQ~fX2uPGSYEUzezFrL`-7-J-^@3 zog-Z=_4f}rZHBVeIjbpIHuV!Va@x<@TVD^{Iz&Gb_O&4etq7gi5_ykR(}m*k zk@IPrYXO41n6^~Idl=}Pr-y?TLw|_t!|+njh1f*`C~YtKZod2e7^7IB)x=AgMdlKA z-9b1d8jkU?>QFPv`O!$ZQpzN)Y%nX~Li30}$W2lEsv`xNJk#JL1M;B$y8O2e^7=!l zM7$v#dEAz%?3o)4PIe}_azLN+FKP);^uj5MREM) zyUt*4vPB{RckWNrGPq_~&YSXtc+EV5R>17QZ2^ej@ly^zx|tyM%Xjx=7yhI>+pn~S z3fY|U_0LRv{C(My15 zW!9A{1#X?tto$k9HReEI^@*VfIkz`xjTWQzMlXH9+HQGerA2k%)rc$NOX`~=yjZhj zow4{(=Bg==Fc~>3FY^Pckrdxb1lFJrv#+(qpcHlFeCB{`* z>}PMy2!x;b=iX~z5H^}X#Bn9(kyU89`UdAssWeQ_wgEODW?hAuSYhEXDQ^f!M zT0WuhNVin?L7E&P03ULx`WXpT@~CQqfPK2rwhZ5NmvO#f9dnhrt>KTGFh#}7pTecw z>~y!Zwmt?sh4*GdaDnI6u~XKl15Zi=$}kc{z=RpY?!cux(L@e@!@P~x@#A_f?muJb z7)u6a14?$1wO5-u8>M!nlVi>vWY}|f_{A3PChxZdyePO8mwDG{19lhT-`Zcg`0i*^ zx=88ZHBu0oUypV8HjV?~Hc0{D;S+_l;TXZ-Xxc?Tx{M3|^4Te7XJ&6&{4rya zy~bJc_x%QvFZM@im|8}Q))_gvNIU*w9>*lY7RJzQC$7IJ6V%vEYA)VE0{0imRkz=9 zdw*I-t%Ibr0vd!u2-=23cH`A>q6{3ujgPNY6PBPH=~}^xJDo>^xVP;>G7{R0D*g_~-Oe^R5yZ@F06`y$a>uctsXTP2{mTP>AzX!kFTx=)P-PC<~Yq)TlE3uF>X? zTZuk1C!3*m(f`BVn}xI0Mh*YOEQmQs%wi@XW|El4B&LWU=2^@`%u%XETS{Ass<{-U z+Nz@3qNUYVbm%E!FTcl9x%2mg0Urn7iK>qhnHIWyJ)4);*9Df6Yd zH<%CHckE*r)*KI9?rKCGxa;)I=h>N6CY!lZ7Y-Pzkt22+b57wSR%1gyAver`%p}H>x$StNGU|UJ%BeOub-QPsUbw} zPkUrlXp89eB6iI!GnTk4q5N>M>jyHoV>}^6)Ip|6RA4A&YTC3$hLs=i-4|HXxM!1d zg35Um;_B#x)v2}h-ij|uCkeBy|Z8rHN zjfZl+jZct6jaRefbdA$yo}a~C9gyc#_}3w;#Vm(zwyO|Lj5=?J^4 z_K&5qE!S9B1ptNGZx~Na346dX`;gub=)MAX;%!5#`TI8hlx% zj#dNeo<6al;3p9l|5j0%F=mP_@@&u&XV%&==K4}Xio&!J&iLJZ#_)ze%IV=ap6|II z)#R;P`3FJ`IoJRS>L$-VawhJ*^cF?)5sVlM+`fR_P|@cPs56SB*Ajj2u~KxEn~kGOU=$KCc@a?$VGAZ~>S)00alw4?0CMOI=Q z@o}6Y82fjh~jU!jt$7P5ZD&8{5F-*ktdzY_M&6t zBuXP9S?m=mKrC!jX zKrx0_uxnGPO!ch>cYUWrZ08lgNk3=N8uPbqVhtv2f$`}gU{gs#w`#ZgiPvj(=$iAw zEP@^CM)vvwqjk$%nKH}**pw<|#nCjr4$8TNfNK3%j6tEn7sGX?Y=IC?TcV+1iA^&k zMuimA>+zbj`68K8y25B8(YqpgCwa-`>i4qbKgQ*L@6E#$7Ye{;LsoV8hsdtj;AcM) z6=Y`BaR8Dl$EjVTVXlvV`y-QV;jeu7N(y}=oVGS#SByYBMxkc><-3aLsD#L=z&Yh0tN+oQ2@zu01#@bp% zPnYbu+=y&MoxG5W=uZwJg-=*U%ko*G9>~gciF-6 z^7!eri#=6&Uz22S;wt^zfnA`%4y7l*!Yu=nPkfEobpBSG>$?MeXL`yLo6z!uLq_y> zyMBv+qd)hNrpo2}Q-Iy}D4ld!+f;g9f;RR@D~-WEa(S%7efSv>nIt3Tu<7r~JhS2} zD6Xh4gaawqPz0+D2(5z}DOvZxvKNWo+X-tf8JjBMA>qwwmNy|Lw5BGU#$y!?r3`D%U;)1FamV1`f>GcUOz8{rPUDFPkKb16X^2uMU&;oZ$7|qK2LZX4-HOV&B z-{-xJDGX7}WVvK*xA^Mx^Pqlw;)^r!P@bk}o?eK*gmJu}0On4_={6lA@pVK(tvH!K z=R-K=W>txs!W1O5_b(}xcZL{flOQQ-T?mO^MB{aFOzxrblP`wfCf6G;~A4N54xzAymjGAN;aLo@jfq2> z^$Q_)?)Y`cS#zB2yiY|u>y#|~PF$Y3mF)W8VXQa{nV;2eIoYoTKEQjzFJfEM<1nLEq?Uu=p#lyH`~`< zb8^OeX)*YY49nmqV@L34BUe?kCjV$8V;Vd@Uz>64s(pyiBqZeX?Gpx-U?XzDLr*d8 z_xj{}M<-KqN}F_`eY^49*KNWdd~-_v8n$j(8`la79?rKok~(Lfmw`~kE=wDpwoy$M zvZ@icdcw}-p~o0}s+9y>?gtWkx{FZkiX(o&f__j<#v&|-A=6x>^PKia*a?MS1wDj# zq$R*J0${jilo9<~w-@UA=shprc$G1ob5^HF#%#=Y;$V+L%`b;fkrdW~bZ=|9>Tykd zw7>B+L_dbICG;CR1DQJ8WA^h87`J`rrfg0RjxmPXY_TsBh>;zikO-Cf5b1wtARq0D zP#H9&B6B95TU|&gu;7$PGclYHVDNS@H-Jr_w7{cojFqR3!D1U(P%P@5%a z*u>pk+JMOLnaU8l?}FyBS8P#hR-f|T3amkRiOmTVc}!}i+O=Xo?Fodd8>i#H4u3Q3 zGw{Q~oLWrWEplP&oK}Q1`wxiv;|n75IXIKkU0bN)=V1yuH+bdyUf|=TgzFsRe)#}j zJ>d(p-7w*1Sd|xPT66Y%p`GR)`8_?*eq))*Bs?s9UeVH+&N&}V|F$DKUBf{r-eG*t zgt@9B)J&iG*ziB;#2CTer74Nl?T{9E0Lkn)U(Ngv;>;ht?oy;CgbjHycZF7Fb6kD~ z@Iap;UZs0>97(z2x|0es!o*aF3O3g1ZL}5aj%T%?UE=qOXI^lCt>GXClPaBajP&(&8e_!;zx%$r$raV@TviTMpKErcT_?%v@&pFcfA&=)_ZBC`kMK`!3 zI)i5|63pFG6%F+M?dNPP@fpPQAQ$_tRzp&tpBvtTDotqvo{RrSPhbD+JAYk3UpySd z?|Q@oSCm3n=zH`ySaPAa>?~?a%Nm=TYIko5Z5y=1l?BB{)qTr%I+O@SLP%B0GGQ4w zw<1Asf~vU3_gY2Qt5mq*;0G(IdGR?V`uSuAaVcS_wgW%6e>ePg4v1BXyHO&>t~7s;wtq& zT!3|yDoSYN2|hXG0~zF7XFMJpZ~U2kNg!J2gY=gIU*hNS%ffOI^1%UO62SFOFGWJ; z*g|uxzwtPKl9u<`cI1cc+us4%}Tn_>Stn8$25*F@* z#ihA4UB>yLvFHaj4o^a*te2>jaku*9B(yjFFjaw-;*`m&?&l)aYz(Ta(vk-?B>$1Y zP@VWIhhou$I0M^%q{(x%)ISm~ZI?WF&aJ1__8Kk`Q!0sD^>Xxjhx zUj3h3^J5-!=GwzsUdwfLg!_(O#?^d>wS40yauDQqj6ycoC z=xr8i#E6b(*-1Cftd&87l;e;{k5kt<3oi^gJvdX(N;NuUxIR*D^TA6G=aVC4tbVWn zGE5$~lWtJ6t-tm$vMWFeDD6K)vmu)8w|`58**mEz|8Nm{sjE->|7g7I8E4$=Qx@&c$ou)ke!-@54cjeIerJG z{*iK!TOKDPdFvUF>530j*S!QN<#r|7JZ4uzzuNS37FrJ{S@wTPk{)hhZwxQcJn!5I z_G%Xmt+DtTcXe``M~jt>e^l`}B}8OGeGJ3FaII>?CDg&$d#}5S{X$~DM#1r@y>Evb z@Ad{yinfc6Sc?BWOSgpuz$5RwT*A1y#FQeXq)^TlHP3gNfQ8yW(e0r{MlyyK3U(Dz z=!6`!(OKgP5l@R4iKC%Lmxj1!TB^R6oD`ng$Qr)RkNRZi?07q1SBmtb%YyyMK#HD& zy>CXPsOF%M3FFXyl!M}|z2liaymfhCt?&Of=X~;_nD`$k&BHzPYS>Lrf&tf(UobFW zfOYjwGLoN#OX;v{n6L6$vLa4NUa*Nh&I91n??bo8|CkNBO&YNB@^k$&t!90p++&M% zBBJGF9poR~55r7>XMOCXw9EI?H3DCS(`_zuzoC7QkrhSvW+CwJ1TUA|$%}lSezSYf z&vt5oUQ~_YHzAi8`%MSx2Sfi^S!vE84-#3(bbBfoAmnH)jAY6^wZ?5%LI}bs7g|WP zf&J%xK!RSQ5RO|xbM8+D7l^uLZ?%Ey7k#r|?cgrH$c>zxV3aIaa0y5JkKKzGI4Qxk zIxHR(g8~rCn|0U6D=03ZPc+r0Qj?TnP@i*FA==>GJI?%JHOzLM9U#w%Xh5V8&}^_k z0Dy0FH4I!l6|i6aob5#8Y34q*j|BVIAgdR7gY3;^Z>7GQlz3`DpHY&%ubSUFT!>~D zswbZ3Nu$wHZXxTlSv3?n%9z&r6cg9Gfw;8ER0gI%H74aVYozO^tEEi*H)Xnuml6!_ z6IERD{Q~9>xq!~!eXs(}Xq%HJRIUQVA}=T^keSXouM(ME&aH*XJRskSwqAQd8}s}i zWx(GXvq4Htvm6q_4+J{IQ7p>tCJHBB<`LhwQIPcDC^D`MF9CG7tc;z9I^-+vr!it}m z5p?tsvMHUF#TdSC5o;RIVXyp=&wU#6nbDf#n}ba@NoOPxj2BO>Rqw9%3}w7~ zHjzeAab~Qw)9U_p!7yF0T|6;#n1iZG3ViVCy^Elne{jFGpwbolbf=TgcvXazGDy?y zV^I+^y3qEJbIL=lIb!N4lxZaXCG@Ifs%Pn19*eJ?it*0iFRfShOr%+bnIIaeU*fD> z8Og(js%r(@h&S!%Nc(jDr9fywzZA_z&$Yq`&N61W&c2Xwfpq3b(@W+V&M9g)AyJd# z5>Qc$jgVtSRO;UDwq*70_fgiZrEql9B1nIVokU*Frv2h9iGF%i3IfYt;oM7jZ@Fwz zAC&IyBy74-=u%P`yg8c#M{xj z@DV2O$f*rl?V(3mC-LyN_TqF~F#&hL(tX^?%p=>zcO$lE8RopN=3eucO6|0Y+0hfQ zexWHXu`G$r4YejB?+dsyE}yeWQEs&Bg&u}DN9Xa1o~a9KKN{3rCd~+b_%3B+RdAc~ zgrhYwHA#}$;pP+R%e>w8e+y1n_ykrk<~w%`kE+_a8~b&2fH%h03OI}XWlSF+QRgE!8%|z8;yjF!S5Yf*P2`b_7+4aYt-ShQ>c8)-7xJ>x8Ic}2NWyvt4Zw(QrCOUIAQ79RA8r;2N& zu#wgfIxfRX_iL){sUS1w(~f<>;LZgFvf&%^7lG1hm!;jXWB}TpmQfdng_z1hmhfu0+rEvn?0Gf@8!`x z%f2w`6eRGvpO;QDb}9z*1SP60@|C7+Kc9Du_%`HrF?9&P@#4IW zw0xa57pD_fEhY=*oEtC4YYZigc|)Z9YgCnGZoE^R3XBPi69j7vYu!cWulh$DSB!?N zkv!dU*!na_#&Ncdd#?PaXUgRMw>jq_{W!$cn7^G9=GhtQCa()EaJi*Gz9uu|k|A|sLnWf|#l z?8K#*#y4b2-E(PIQG+6AYPu5!kMDdA3p|^t&~{V=>N-A5n)?;Nvp2C3pnt~w-~SKQ!3un+F z45${|xP{Eh_E4n9`w?NLTH4+N@E$ACSbMesbM#-L+(}wi@+o$Rc?eOFRE9+1Z+<3g z6$5TXXCqW1=%2f+I%80LxXK!rkqIujZKA(Kc_kd#T&psMotBGIO^-nRPW0zx9~3Xs zIWhrXXGo)S&aW{cI?H-YZJLcUm)5!HaincxtikoF) z57>I8cujO#cMP#2lhvKT@?^Gy<%fT+!icX|^x@c{2Go@7{%F8IGV_!Un+YS81$6w? zlJ;JN!OB#}Bu42q(&MWHlllMnb=`JckQt_icqd{?^46Sx2(LW}16c9XKgA}h!R~uo zwV|U=5K>>9P`3NZ^wiU57zUu7?v0=J{5N1FLC)isV!U8@jZfYl9I12j*n^F7^~H0& zGGY8S_QPHEjyc}1B#P8bxOYYtWw?LsS^LCW2=1w)A%0u;q=Y7oodrDuJXrB2GU>4H+<>Owaid3rK#g58|$Vf4gkg@ z6YhLtuN(X+0%7ErwhW&}(e1SB`y@MsE3bJCX2?wIV$KPzCrTVLAXr2zr~-5aJ|n1l zM?3kv(~^Ckoh)0WYLf$|0dDx`YlRoT%!>G+H@z>hl3jDK!r)p10Npi)(yia_TF3-vByyMN|J(w zs7SncO`&+SB*EfU;VIBCR}OS?|wK$F(yGf z>y4FEh*OwX^IT#>UYJ<@53dZt*hWu^cQ$+UVv(78Se)XHg01RWMVS9>SuNS~dJmA! zOb;2lL>puLHkGYI;CkA<{;7WN)gB4QL@rp5s8zs@!U_bJ^&A{n9R)=Ua`pVD#|MxX z1CAnHw)RD^e7-u|DwP(WM;43SY<{G<%w|Pd+0;-4z9?7MzK0_TS6r4j2+tIH z_qbBFGBbcwW`;{1?>XeyqUF+N{and^8qa#q+VNSbo8Sx|Y0XP4gF3Wb(0}0W`6L8T zAys;0s3}}$*-(;K=#nn?teb1v4@0Z>LsnroU7tc`Bp5~Xsspi^A`6JO@AmD2OY|(t zt1W!nDVOlG)a#=E+nlpAQ6ZjOD1-2S5e#duJM}Ne+wJumbz?o8-TRlm?1_rjM0(t< z_~Vf2>feGb$Ri7m;~)U@|4n}^5)_&_f7}nfHR} zWsy|{x}IgqHMqd3BV_U&A}S*MY7$-F2tYba>_kTJRR^f8^B?@nZ}Yhkn3vPZ)}`Vn zaK~|eG4$)f=#xSL@huPzLq~J2{-#K}eyH!B9>;^v(RXGL3b02x|MtiJKlOC`prnQe zpfd0A914}#qU-BjAqtww>KuI*k z0>!!t%M#u)?hGAT7w6-5G8tmD#iM04B%1Kxpl0(P%BX%zSQd4LbpqpBWd z(=7LP-H_&7=mfhV@caCD<(;T+w&nE~!XZ6PVXs-;(v;S3D|=R$dE0&+Q*^n;l^*^% z-n;{r795fIi~QF5A$GPb%=sa#T;pB-6(hbPfDzB$u-;MX>6AMpT^;6yLotghtyIcp zn#R@&+%a?Q6wf5WHGxz9Q<}tdEhfSIq3(0lM(+8bdi(1a+qgcEz6DPYj^cs9Y{1ku zL5?^nMv8!(!r&St#lJG}2Yi!L^BLwqtLN0aINVRL00ng}GAtH~h63Lo`d!&dkuQ?V zF%pWc2l%vU>fHLl`IlcZv{=#`kT))IS9(>L<>hp@o|UD%gn_p?f$4vXb3QAh#mLbS zfz7|puTsFY$wlX!zirC;o;Qc7L#r~hr zQ+CUZf0Ok^&~M*6fczfe2d}NiSP{3d?0aLzI`#aNZtcC)I~YHv)IPlLdejApPtL+t zd~wH)>&GGj${R^!Sr8eQ8sKeF^GC=e61%BzI%iNn+MHG7@^d(z$s3=7sRBrh{yAf+ z^m#te*DfSIv(A@!k&)Sv32A2a3y6?B_Z1+&x8(!BlXRSvnAa|BnKZ@p#uv}&n9Utz zl>0y^)y`fcAsWYAoYs^wdZ)?y{dc6f(7C&64K%&jS!0B3QnD*wRlywhme*z3XXLEp zpE)Q8g)7bpEn%st%CeONlZV#;Rpc?A$G5k+AUJl3v6ANyMavTN?pz3H_V!0&an4!L z=$?K|Wr&e+gYit*?(6SLzEZ4mM!7xIolGsf+=r6n&aMLOc?QSS_VrKcQP6z(>Ka$$ zH|kG#+)^!KUo*Fn_Z|v}b|gKAJ*z#zIgGRz!wxRxFh)<_lo^i@|>z- z{+n>0&35s$Id0&x>jtK~_D(Eux6tswtbkQLpVyaUSo zVe9n1a#T=lUMTuI;iR5%2R`V{Os}p6!Ia?{ z1E~1tF2{_vna&XfXCcJhYaay>nki0~Yrosq-VgI);IW{7!}mnbONl#Z*&o{Q-WzAc zbX_ofn+A4A%px3&8alju!jP_?A3adig`IazGE!8Ee&Z%lZzpVV{QR*}HZ$Ic_1gbTIRf8IenobWrytt_Eb{}`S>MII5Wtki@U1sxEm`ny_LQ6K}O)v-oP8l1462vbS3(lqn@ z&}i9OytfAc)(kEA`x4-p_u?Y;oxg&7mv_&z{qM?B7?We+7r2oDul-KOB7AT zcm(@fUy)lX#FA)4Qw2~NK$y)3AymNNA9PP7B#jNbC2er4+7c4GWDj@bwlxRKDEhHP zi0C=K4I4EC2hCIjptKvms2_b-O~;fdo7@fClX(5&js&uV0qrU>CV*m^bpz+G3I5ld zv$_~E>Y}CtDN)3Nqc##DL+6|eR~Tg#i)mDF&%O|6`b9_grjH^MWjS%)td?31yf!?q z&wr79*3a#)_ycKLK5%Fp%!w6#Dr@BSb#NddD)i8y$ZkY^;v$pjm2=-b?@Bf@=XFkn zl@u}v|KgO=<@cOtK8*JbyL#H1XFnW@Og#$~(y`ZfomZ(-<>e(XUP%6FR{3NBI02bZ zi}~9a`@-yba@v{h==Sj>&(NpO1aGVCM~oT|OZpd>5Y-CVf}7OfF(vBqb^-Hdnp-Rt zWZ61b=;Xz2ixsy`ZcTmq@ zeEDdvKI_gyUeGrVo4pNHHQI?viHfA}KG`weKEeHebW|DKCEh+cCl?Q{5*EzCsg}a~{v2@(f9Qq3(=j!ZJ5dxx>-AHW8#Gp<9@B;SYybr{)=GOymYcGHir7WfbrTo`fH??Ke2 ze)?RrcqHgoiaHD25FvkE3%vQ6nsA|9oyvcbzihxsL3vBf=t$cPt0sGwV3k-3WO{>1 zO1>3iE4%FzcP@A-?8UnA+`h&fo8~^Ok#+pNKE1qx%NaRcmMw#pgCycK90PYCiUPxnO%iqDXFnCi>}vGV->S*P+?ZUfIGXu&GNk=}3llCth zz7yg_##xQ5F0($WhNgW)ijf|#2&s8_OQx&E*KqBw146a~1IagB--K$Wnjkci?_y8V zd~_mqLS3?n>OoG35pAw=#puleYq#Qe6|yCBS|%xsZ=-m2ec?!KnPB7gq%MAR7kMlq zPGB@&;f}`^suWh%YJVm%qH=h(n%X>%exQYW$l#z!lQqI1p%-_|U@ z15V4gLj|3gDlP;bFo=3Gq=3D6{mT;V)kZ{Ttrg|Vt8S*4Ft7()ZQ-)NU0^O&QJ@yt zaYxY$bJkYLXh1J<{nJozX1y3Tup2B(CNGKUkGxcy6JF68gmO4Ex3dEbV*zM(*m=1G zWP~pE`Qya=c}E)PkG-S@>73PBXIBhS>X*g5eX3GnI)K!CjsYfP7Hc93o^6k!AN=CR+?G|V~~niQ^b-Hs&2E~q7M+4Q%BLuVDXe>_DuHqsr z3MVGCdgY5@ryh^q4HVk7@Q8&^Czez6xp=YZ$|$qt%}4twsz|CdJOqhqD%5n6bTJMkFyB>uh4)}>-&X)cg$cXxZNx-i-BWKA4|_DM1A!Yz2BwNVI9 zgBnp;I{;xid@a)~?tQaKc{a)U&}=g`H7ArLBs@Z$@hHIbBsFr^yl^GcxI9yZd@0)7 zvRxc%Yl~V!hYj4m%Ub47mwqyHhzeO5hkT0quQ}&L&m@v`*hu(?WFwEtF&dK2o$=0u zi&eNiaK|mAAvaDfxlo@aOQ{TH#a-2v0G}t){N0d%SmRHOmg`Th#q}xwF>}$>lP9x! ziD|)%;GWTosSDTb!CE5k#Qz*2JV;t*ni1#2h26Q=`McSuBAUgfUO*793d&bOOGmmy@>1#C*J;gcIukSudJ*|E$ z+)O)}eq-k;^&225>?TK}4{R!sWk_&d$-1y#o_*Af{lDg%n=B5EKV?MNZ?+wT#wwuj z^t{A3`EUuTyNx=D!CWG-U30!-I}YT%Atn)PN{eotR&lyF9H&BCPY=itdJXB}P9sv5 zEu6A8uD}OTI;KV)uT!bEGr=7rH@Nn<(6JBh=gY9@NU2pKSd)hKwmlUMt=(}yNyKYu zQ2f*1tmcm^a!~IWs?rxQpUiIb-b@1nOnu!xM8l#gFVQ@HzG35m{|Hr;JC(9p{m!gM zwOM6R_5|d==A5B#y$y;2dw7eUJo4>n>KCN5Fkd5us6eegrCxz^mYFg|~hA;Yjw9DW4$uP~d5Yu@7&?YkJk9AJ#bh2cEN;>LEEDLa> zMvCUf7)^YEW^CoVi3(TS<;+y&G2!ktpcpi@F}=gU{o0mFNCQb1lvp(?wTR>)|A@_< z|D1Df%ujQ$tB8`nf8vH3`yK-moe^>-Si4-e3QjtnnDZLYYq8ts&bQpS^T5OW0}pF- zSXk-|@I`3D??sk;?!V({l!YzRWyfQXr-UPi+CHYA%|2AX|HA4rK79i|VVg!a348#J z)i|x~Lg@4fIJ*}c+f( znnK&C9j#}PRqd>6t~!Tkju2S{$oEXkSoK)29$7X+MQwyU1-$Une>d z=jf08&iYL(mIomcD$p_$S9*Tnh;oXtr@J@Ke!$HuA5cdMIe2Qo%~#;wwHzmz)vZPP z&pBtkL3VfN2imf2xx6CnjY0p9bN>Gm-Sqc`**1ZAvKm6jep03sgEwVlxbrp^B=v@s zzMtQ5FAO_`WxSv<=u-QhUt5sng+`5?P&=JMp z^N*gs{@G8}Ood+}TnpmrtYLpyq%1<;qkoTMRVR;xJC0T0;5g`Q)KTKc_lk*ucVFXA zXq8jXrZ!6c{B$<3qB~T2)3A^HAnaty>3k`u=CFS}B=U?hylzsMem?o&`o;EY_lC>1 zAHfphAI>R=1xvx&YQeY1oI?UEd6eqQnNojNT#Tpt51H*#Cc!6GTv9crS=!h>2#!7# z@L@7ych2G2vsma`KuG-$7hr$&O?(OnFB%wWWXfbkMwY~=>wM0$1a3<^1?Hd3#%h~S+$xmDBD~Ch zh}k%k6JHgLg&>~wh}^Z$j-9TY#vXz0s|5p3Xeg=rgnowR@;w}LNuhJj5~c$F7rt@n za&}Ua$BTFT=Cm2q(7zU7oH^T~p9kxK!d0p0k2@5W0^l#&g141 z=p2m=;OMPqq_)`T^^Y8Ju{JuZp=lY>KQH=^*DA4MVG=5 zruI}4qXOG`SdDD0+XuFXdhL_ljuPyq{stPA=?mAv5$CeK1d3Xe(dY*kZ7v;qx(H6| z=*ge3iktk5v)d(uC1Yh6Uwn)ZTrbQ8EY!Y6xSa~l&|;T&0yLwEN{$$V}H}UJYH#}rC!m5PRot=g4?w6+i82=F<4Em8wn_W`) zDP|jzJeX)R`|zZXy__boLMQVSDI3rhnEiiCmb=W>6B{o}PV1 zQ0de-C&y-OAD1unMjcaU8gl-Yi#{J5PApKks{K2aGbvv52ZbrwMZol?2M(_Kw@gdJ zSzCW0ID(PYGYIiNb`MwiB&NNM#^(5e!z3Igiah_LEh!F+jsCi4$~!&c;e_6gbd&9M z4rtFVH4R(H)=OFsmljMGiic=M&&c@@zg&ze2vU=4SLG+S+!|b{n>@e5>7v; zRDNycD>Q2ULsZEDBYhm=4z%@7;kq}13}%|YC6&?H;Cy4N*-e4i#&hN)2%i9okjk<2457yO;cG(9esM<)L#t$ME~9MQfUlKm2oXAQG?Do z*HEg-qdO+B_a0U10xC=X&mh-a4Hsio-mK18^O!HFG_YNTLW}wVsE#vYnMT!c4XBEH zD?lB=Da`FIXYv!(-=dJ*uq7d3ikjwN#lEv^(NOXvnLRV_ik-0gY&n|x;tbHjOwJQf zyLl|anYZMtQg_ohKqVTUI|fQ0+#2*=xp(9<8mJ1snqj1)oAcFZK)@f7eRn_k^WE<( z)jwKnn6L!j+}y| zRHMExUgr<3bMlH&7KN%5%h~VqDh>q@{uo5uF4a$=Sd42>pCyK#Lw-{{d*h6L-ag!7 zIY-Kl1uqk0X5?m3Xa^KQ`O66lQEeF7Okh#Zj^&|U$=((VPxnFf3%Pn^46FDWHBK@5 zI7a9C7B7` zWE&z!c_bcCn!xb>2R2%X5JZXPrbfLws~c9*Xv0Y8G_*bw->ekZ564tZN;)y7$El}p z?6I=HxN6`!QJ5IN-s;x$`~}H(betyjnq-!f&L%SqK6JVluu90yg7G%x6fl}qtN?j9 z?b)Dq30_%x4jKuiJ;IkB*~L!&(n9Rtm*&XfbF_n%QwiVPwT+XX?Q4(Sc_v3~>rZm{ zk>d#Ze&147ub&tc$QHg0TTr8&B|=3fEIh`z@_b%jOJVPj)pPcHa3%ftMum?;OsI00 z$v*Hz!Ua92E)&AkE|>@%=L)yHsc!w;bB}C{e&^>=$f&oTqb-iBir~r}>7)MImxR#v zowVPgJVA3cn!a-fjcVWU5{iRtZ0Lr<@BUVr*~unieExJ>(b$0trTe(K=-tFW!++Q? zu9y8TaMR-I*9-*O<>V}S2ONQfs8$UHnGFM=I!+aQI%rwu0zf)RUR6%mjL>PcATBvVHWf=f|;?HeH8WqzZt$IpVQ+FjwO8 zaeolSIF$SSxmQ6+>JG9$pIMM-r%lnkV^SVEmAJI6J0)DYhmj7ibp=@7u4gNmtwMQJ zPG*6{XW5X{(sXhfzGO_D+#>BUs=nU~hCOC>Zn|md{`Pf+ z-Ay#WJjgyu7{zqU(b=9A@T}_ZJWSn_t}NeX9N@%*j%l=&Lbb13FuTRny<*0JzP+pqW#n2jJlboaMSXE1`SPhB2{1q+iDzg}O zx|Q+%qgz6mf8>45-kmU*^j?a;p@o&NR-ad&<8mY{$HeO9-q5o#ci}Tqn>n;?hBm8S z{?u&9YLOitRAuOp(4+%ygDb#!(VK1r7mS4Y|M>Mv_jZ7~*<(M{yq#Z0!98twE*A8t zI?C9Kwu6waWYKRwwoB(>FZZ3hj`C%%RgLEan?&Mbne=^ZCm1(1RT6n^4}#d9V+3-Y z=fbb`rYFH5VQF}89+kxDCd1>@#puQ8Z%SCtN-k8ozscQJfC6CH4jJ(v!$Imh5Ia%% z9eaL-6-NTuGcIH~c^zx*Vc_q9*srx;MGx+FB8odXnZc7HNQDNFs+TuLx}4bsoV7n- z&3MGC9!7}`1hdbiYj&Nn019=Owevlu3QoYt^>2Eyrj=|+_)Qjzu54@3IUXiyht`K? z!jZ4}LT4MujPTFy0-1vn0_X)%hNpaHmS(l`Yu|g5xwDT0Kjhe`)1Pbpj4OP%z;`vD z!T4ma>*O)~Nw~)NG4sH0n#N7wD~=GM+v!h*82ynIr_iQyzI1l&V{XwDOKSTu4W{rh z+SPseqm#`{AXDoj)nv7|@}@E<5kDQiFJR}}o+g2#$0pS=6N+-rA{kuYjQYqbcf`2k zSY*Gh9|!semZZ%7Jd&h7qw*~9)%zX&?nO7aUbio07STw?=%H*@lMW?HW;)VMX8?Q8li=y{a+W7N&51m-SUYr+%G50t5@Lx1UqaA`&FL478u z3&sw4o=N|`a`+eK_mRi;Pnb&|?xH}=%e;epFZhlYIJBehmZT|?Sw+7R&pC@9Y==G7 za@6GSoaM`2>yl3|d8Yzu^3dRp61RL_ZSN0Saus@UOTps816i{FX&S|9V$@hNeiy@3 zA20Id{t7o+&9Wqagj(Q8K_!Ek_XphN?33o~G9@N2$77w|EZ54bX-qm2A74b}D95)e1YncNiT#BW8hrAV>dy~wOy+Yw(9)&Wp{iVh^3Wo;nlJ?@1_TmJ* zuZhwAPG?+%&miC1x2x!c3stfAU@H`H+d9#AmzgDf)Bw~3-(7G0w#cN_whbpAo&ygy zH%Wl^hhM}+R~E7M>FtCDU)~s4^NPo|%@Nc5drMc70o|m0TUPFfL1qCZdv?a}*Muyr zjZ9tL!eFYmBz-LbAKh`{!zqxR8(sP?j@O0J{yN4ERa<(ck|!kMM2!7-5P}fZ$Yl?d zv$u)i_BgsCt2&O(E7Id=JO3YL=NS!G`~7{rj4~L#ccYJPFc@X@!6?HpdLNw`y(LOS zqJ%_5O(I%IL?;p@Q9}gLg=o=25Qz}t$-UOk@5O&T&$^%gi?jAx-|NhIah)^!I%n_C zwfF6>)I=iY{8iriN^v4T1+R2Vl5Wzv+qJ-+%q?1@+qU>CeN4R$oEUgJGGdN|1%Dv* zUmp1XrBi<6EtRUg>r{^JM2T0T7Yu+}IWtZTTyG6MU1cFH1elOaWrN>mWpTrF*pigWjF2 zz*&W}q7M##F<q7;Xp9Im#l5`_cPLUWQ&y7nkkF;P#=9vud^g?|2Qy@Guz#mdX!hm1A0W ztrxRJ70lh#S6{y+tdzAtyEEx8zf%a~_jx}Y0UhNsKWwkJ%hMtkUb;!3^8mJM_kLfo zjG(&aJVIm@)_?6l(DqGE#F*PlOh&4Zj~L^iSVTgir8=fSM?Gi^6Ff3Wx2zY;hC9d; zbsRO2Sa=#Q_r^vfc&qw;v?kd#C4wS{WlF{~_n_@c_Z#g2aR(~O?x@-yh$q<}0HVWh z1=%6&nuz=(!?|V)G6{t>o8 z&SR#b9ris{+;q8PHCojhoA5J9=oQFv!%Ge0v?udwk9t1^)xx954jq32_o3?82^bU2*O2uiO$ zM7>?2F!Ok>M=$2#A*eFqD7?iGEu;;U0sdU^6eK+BG?dQxWPU?@6DeT=va0@7!m}96 z#M>P*>|Qxo7)zF97?v5=2{dpiA-VDocX`dAMaLzm_1q`C0@w87uJmk`B;Di=w6Ek6 z+Qoe28Cp2_fTre$7Up9`lk4|^`|=aA%@(qL-oaM2#T&0T{ETO@CM7Io>^Ht? zg2HS*QJx~XC(HFFf|GtQipAMsr&{&Vr5L6E-$>x{U0ny8RbEO%fWF+09v9iu=~*IC z2x*M#+r3!pElbSNdrzd8B!Y;P1&Bf+7AfXgkg)_Zh+EHx5Mm=04GT9~xXr7S1Q64g z1)|;x6*u0Q3UNYGvJQ&Y2jn0Vcj^uM*1nLPmAouE6KCV{>LDI&+< z9BiBzx4Is5hOW*g)W4F=F@jIVNpF%`9XcH?2dDMU(Fg%l$G8Fusr^wmLIKlQwdHrs z;vz0BCa1~q6pDOKly^GA^|v+qxokx3O%tdTEpL(i3Cbxi@%wV|Cs>*BF%&z`4%tsi zmsZRFyEouRm~eRh-v-=rFxHD*YKG1Gn}#>4zha**$$527of%F0Gb-E-oWUCuwW>0n z$mAQ)m1uUsx|OyFBKO!G7kp`AOehg*(DCF)$|~Lhgt+ z8-C{jexb^g7t^A|0*Y|7dv>5}!Rn?Z%3*{Eaojh#gI zGO`2Bz=pH}4^u{M$6~}sDQM_2E7}Mq`A@8WJ-p6-QY9VJQPQaRD`+yv>dg+zHAI{&-@`aY@+4IQT1yad zGM^r4kIOt=$I}Zg4oPKH)hfHRx>yeZN&z!)d*P!T{B6hI0^Fm!d}lv~ECPZYJLmTP z^qy3LsA1Y=jS*@ct4hI^aJ)qD+bT59`oR(QV@TX`0-x_b&oiYE?_!)|m+65cMyZM!cMp9^t?P00EldpVE`E5Y+G)nC z@3YC2POZkqFcJ3#aW!4m7d8oNqr_#OfTH3~h~fv$ zI-TaZQGbI?Ke;Eb@50y;Z}ABEoci#`uQOY|uOKlx_TjqqEI?@R+n{|h57+}XuIk1F z6p&&oGF4}i$>Yk=lR-=`W~zq-}NU;hM$u;fyvWaR!#cataHsZ7lIN zU-%vNtyI~mDRm!DeYW0Oo-m4&g_||@e^X;nr}X$mhxeN@sse?*$`e#=npW}XW zkN65c6M~1tNa9y2oYgY3^GhUKu_;2JSC&FsX`=_rUW%rlL9wMHs{ZHw64i`ku_t#aS|#_v*F zFIaAj^nRD7E6&1tyXr)60$ zvR4znEgh4HAG$APt~lqR0TukF{{sKp#2nc>31)1{lYv5v-N&X(!}qX1zGVx(oM^>; z^JFm(m*Ju*7o!*C{F3SVHhr8xaefQUetHb!PLRNDi=^tlfcko`_B??bzI7!d<~R}b z&eIYEK=Wf1`s$q})CD1lEPvid0BPbgFFtkQG1EpX$|JpXqbm>OGNYG zD^j`5@!WCe?fu(}= z-DyV7zpy;38=E4lAn__h|c4Rb1r@NnRl&d zi>1zY7f+qB_2Ms(P$h;^403YuJV;(rmk*tFR>yf+%<` z=adi}L|1`fBxCUAwQamV5}llUQ*1vnfXFp>2plVArLvZSEqn?XUV=Xqm?hs09_vlcR#$&B*0G-W!wi)~UTr(T2LJ{7FUkabmuLT2_i;8Lo_tBv7CLvN{n6}4<5>*~ z-LPJycA}#uu9Xzg{)jB+LB_m|l>d3@qjJJ+>B!X;5>ENZ!FemjH1spl^m+!GImBGX z47xR^2OA_Nf{vr><--`A#*9LZUqpo@Pik!wVk zI^>`_A`X-A>=c*97T@8$Db&*u?WN=3)MfLROrn$sA8%oK%p|I?@}gC&@$EG2Gr?aVsg)M*uf^@szl-xknP#N@Y2K=<_PcOXsnMX#8JlN3Q#8Z=)9*Ub8`DC@e32izqPwDi7xbHPum}#7 zRAOS&-TO1POl=?3o5Y$#Zrv{S*LH-HC3v%_Qw3UCZGvaig38KvskMz<9K7N;oc&@jOML90q4D4$NUu|=C|LyT1cdXJbT z-#}a9^>qW1atBq4)NI#}C>ghg&NQKC*2@uli&{?8wyL2Gf*`Vo50AxiGCuf+Jmd{0 zW_WA1o=O=!^+t}=+fh<;3Y#x7343AcLdF(wm*W#dj=^`;iuc@t_kP)6BT0WFw7Yw$ z4~5BW7yZ!W62JOHM4(fmbevyMGzS_GZt)w0N9NvshpX{;rW@xflfQTD3GY-xHUo3x z%!T_H#<=FfW-qby-1MPAC$=4^#rHTlo!k7R!KR&pU#7B%X}Ix*)V4IjM^@|74Uhl! zUVn6MtEfm%5dDq;%{$tdMi6B>>HIL^d?4h9_-6Hi<^2P4ui6LqB!dgmV|cVxWax8m zpjCCVMT$DJLu0gYc5ImEbaeP6#H9%dmlzib`t*z;K+0h!R!7g4^CybJ^Aw|^)HxQ9`q;7I%tS55VNe>aFrY*Y2do(kJ)%+wv+jFyh z{e{pF_6{OZQw#GMV0)$N#E_~AunnM~;B5>H3izs%WBgSW^68pf)E!N);gLq`?CNDQ z^9@ceFHK|Klf4oKzD?r0&VE#nKmVk@4}+&6kTF+=M+{a7_K@|H@> z_BN^6$2jHBFu)J zY*rCrwG<>p%sSK)+ch{Q87E-ui4e!P4?=?Le3y}V(VZ^Xa|nc20;IB~W+_Q2=BMMd z5EtqF;lT5n@hj@zXXJd}P!%eEtTxUbb`NaZ3z1y5_sqF;7itJwqtDF{s_Q8~XSj||poKQb1DjGp=9@Fj@ZaAbM&Z1HHH!uDCG9n=JlXKzQfFOj6W#CB+oaAHr zOI&u3O?+}zC&l3fucrOPHPGJq1%A6u>q@)P)1r{&7h7 zN!JH@N8q8Wg^)eDMehgp*Rx|WEpQ`y|9h9(;n_5}aY_x@Cu}EBjz2zN4!W5DE`=F3 zHAx+jpyqMD9GwdC&9U8ZYUu}lEvpG8Fgao?L9axlxtoj%7oW0CZU(2hnT=Ga?gyoi z8Y3EFFef#&_OBO49!6g&&~tXyc6vygFJSHxrr*SfJ7b%utBVXOx%w_|*7oc*mmt|2Rb_FD{V zxvTzwcuK>{ZprD1)-naub>CxYun^HQDsJ1^Euy(;NJJ6dkYk@$dk${a6sL^13!oew z-?3|P7tp&7a*{DylUMDKHL^lQU;4$DqJ;7+kNp%bzhVGnXEZ}H?q*I=zugHfbvZHhaNXz;ubShiMXOA z8`A%{ux1nsk}2KQ>3=;g@V84j#djQ5`m~D6_M1~6hvybTZS75?4BiV&?DK@&@D_Z; zzm6RrlMm8GdaO3FG2oZ5*JQlu_QlS~)i;E=ChQF(KUF^zIMwLG=QM2#`q&7Nh5We` z?p3}KlVGhAsls`khnzCi#;^O2f4A(B7$sYkef+U4BF6$MivHW*#j}sb8V`CXdzCj} ziDy(uApVH*6}REq?aK5F!sbzY9V%Bar3ah)1?!;i(h2ibaH*4m46Ru{X5%2IVUvK* ztkwkel{_sm!(ef znpcgfq}e9{K~5O;GKxP?LKZdhs-Ck& zlcm=*4XL5%n^M-w@oynSSqP2O;oR0r&9$b-@YyyB4px z_^}+}KBic^`wG$qJUTx#d$fYYJU-yX3n$0ju9!mEW(gO)h88~j_XCPw_g{f~%PnXX zXRy4F?bFF#nHf2=X3(-zd+XRgI>QaF%^D5?(smK(NcF= zgw3eA)bMvnf4H_@8jPoOTgTGAULBv)qoI}iF^rtl#m+K+)`V~0ju-VU$=s^zG8k*K z?aLlpZLDHC&r8?e&%_^&;CM-s9kwh-2z_BM9(Bbz+f|Dzz6w0Fh`RAovzl(11{37w z_&WBBR0xZ59BsIVmo?2pRvUu4337Ir=tI?K z*?+9bLJD)U>>lR;on+)cR!94T<3ILQC?5WgRei!K`j2g#=>q&?WdWXn|JWK0fYm=X zWfa48b+4*CfUL>y+_^tj*0KHHm}hX`GtcnacO#+;g^^R8{iKxVm6PTC5GP{yOc`n|N7MKzU^Sgp4hlUx?tMis{Npg48Utg4Y#xn^EJN| zVoq;RTsl)=Qt0uOH%;;p-L_+3Yx$huH>pgI7!va2YsaC`FR6|EJ?YFTRa`r%i@Q+K z5`r{QGiGqw7alb;#br#kG+L!XqO`LPRtH?M8N+EiNqb`qZfX~r#RJcv5_TUvetwh~Py z5$;UtliD^1<0&VS%2?!wy)6HQ=IV08y-ip(8F`#z!_xW5$0tt*b)JvKnnY*uS+k4A z73#AXmTeA!SjQg%=B#iO67r`W3-jW_WY@8DkXncM*U@o+|1Ia7&-T}?2{%x1%4jpa zW2FdE_cc(8`BtLv>-s8&YR5vN@#c`nmIzdXmw`M;9GRvv%(+Fl^2h(UjjQK;!$e$o zaB@JWJLjcK!M0=Mw-`~$f3)wFFxC4+dEgjgMlFWQZh<0*BSjHrp?*gc zFx|5qtnTN>b@gt?Zv2Obqu-C#(0!gQL%qQ7pJT1|ks+Fin)S+`vTm+1-=5DAvrU4XUYE^Ij4HMofBy`P+h) zAMzi+Ct|z+(NABMkSfs#FIJ~k#)#)xWT}_le}GQ?Qp1Fa!KE{jX57Ax)bxt{Zq|3+tKOm0EgZI%Wrb^ z*olJx*XzmG&t327_>9r&5_A@m>4Mh~y zf~tz9{Xx19yS$zggt1k5VmAsrJuaXiVjoGA3Pu^DMlbYitY@NGR4(+mWoyOj1W5&^ z)2wk>{Q`l`j}(HO>3f6YcFMGRV@ml`UW;Rl4F7V=Llwb4EO6e)_*)w8My@uGq~!&G zpWnFNQy2*<*>4ak%48=ljbOr0Znqm3n2%f8HgAT9vE~WuQk%N6)b`l+mjz>i#Je#B z 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

78d2RT(XwsDX6U`Lv|;U(q>g6dUE07+ZF? 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

XDmA5YqAE^DYS$v73&u8WNIW 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

=k(n+H{>r^{tHE`Hti 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 !u!fc0)F)X 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